关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路)

这篇具有很好参考价值的文章主要介绍了关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

几年前,公司买了台国产贴片机,里面的主程序是QT编写,运行在WINDOW XP系统上。主程序打开的界面,如图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

我来简单介绍下程序界面,各位读者不需要搞明白功能,只要知道大体的流程即可。

分析主界面:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

一、左边的列表:

贴片生产文件,里面包括了贴片时元器件的坐标、飞达安装的元器件类型、Mark定位点等信息的贴片机工艺文件(文件的格式为CSV),使用和编辑工艺文件时,需先点击选中。

二、右边的三个按钮:

  1. 用打开自带的WPS,以便直接编辑CSV工艺文件,但是因为CSV文件格式比较复杂,一般不使用此功能;
  2. 中间的编辑是在程序中详细设定CSV
  3. 最后的加工按钮,就是进入贴片加工工艺,也是我们今天需要分析的重点项目。 

分析加工界面:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

注意: 因为逆向不能影响生产,我是在虚拟机下运行的主程序,所以下面的6个摄像头控件是不工作的,实际是显示了6个吸嘴取料的放大照片。同时因为我运行的是贴片机的默认工艺文件,所以左边的列表也是不显示内容的

一、左侧部分:

  1. 最左侧的列表,显示了MARK点信息(MARK点是PCB板上的一个标记,因为每次进板时位置的不同,所以需要MARK点,来定位每块PCB板的实际坐标,方便程序换算实际贴片坐标用的)。
  2. 中间的列表显示的贴片元器件的详细参数列表。

二、右侧部分:

  1.  加工日志,显示了PCB加工的结果信息。
  2. 功能按钮区域:
    1. 启动:开始贴片
    2. 单步(Enter):贴片每步细化,按此按钮一次即操作一步,比如:进板-->识别板边-->识别Mark点-->吸嘴取料-->贴装-->吸嘴再次取料-->再次贴装-->吸嘴N次取料-->N次贴装-->结束贴装
    3. 停止:在贴装时的暂停操作
    4. 配置:这个我们在下面会详细说说,里面包括了我们需要修改的同取功能
    5. 退出加工:顾名思义退出贴片
    6. PCB退板:把贴好的或者不贴的PCB板退出贴片机

三、下部:

  1. 六个贴装头取料时的照片(飞行相机拍摄)
  2. MARK点图片(MARK相机识别,在图1,复用贴装头1)

因为这台贴片机是多个贴装头的,所以取料时可以并排同时取多个料栈的元器件(需要满足连续的料栈才能同取),但是让人费解的是,这个主程序的贴片配置中(功能按钮中的"配置"按钮),关于同取的设置,每次退出加工程序都会重置,如果没有设置,就会变成没有同取,如下图所示:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

逆向目标: 

        所以我们需要实现的目的已经明确:"取料支持同取"自动勾选(不用每次去按"配置"按钮,自动设置同取操作)

逆向思路:

在这里我想分享我逆向程序的一些经验给大家:

  1. 针对一个未知源代码程序时,我们需要大体知道一个程序的界面流程,可以在心里构建出一个大概的分析目标,不能没有目的。
  2. 特别是定位关键的代码时,我们至少需要大体知道代码所在的区域在哪里。
  3. 使用IDA找到函数调用堆栈链。
  4. 还有这个关键代码一定是修改了某些变量,我们只要定位到这个变量。
  5. 使用我们的二分算法,在这个区域内的中间函数下断点,观察定位到的变量是否改变成理想值。
    1. 如变量改变,则在前半段代码区域使用相同的方法,不停缩小范围,最终定位到关键函数。
    2. 如变量不改变,则在后半段区域再次使用二分法不停缩小范围,最终定位到关键函数。
  6. 在关键函数内,通过同样的二分法,定位到关键代码跳转即可。

接下来,我就为大家演示下分析流程。

逆向分析流程:

根据上面的逆向思路,我们已经有了第一条的分析目标--"取料支持同取"自动勾选;所以我们看看第二条的代码所在区域,根据我们之前分析的主界面和加工界面相关信息,我们知道,点击主界面的"加工"按钮会进入加工界面,再点击"配置"按钮可以设置"取料支持同取"

流程如下:"加工"-->"配置"-->"取料支持同取"

因为我们需要勾选"取料支持同取"(下面简称:"同取"),所以不免要从程序初始化CheckBox控件代码入手,我们暂时还不知道QT里是怎么初始化CheckBox控件(因为CheckBox控件有选中和未选中两种状态,所以这个初始化的过程包括:修改并保存一个类似布尔值的公共变量,然后通过读取这个公共变量的值,来修改CheckBox的属性。PS:因为代码设计的关系,点击退出加工后,这个布尔值会重置),我们现在还不知道这个变量的位置,但是可以确定的是,初始化这个控件时,一定会初始化"同取"字符串,如果我们能定位到初始化"同取"的代码处,我们就可以通过IDA的Xref grap to确定初始化CheckBox的函数调用链。

如果大家还不是太明白,我们实际来操作一下吧!

打开我们的IDA8.3,加载贴片机主程序,按Shift+F5打开字符串窗口(怎么使用IDA8.3搜索中文字符串的方法请看以下链接。)

最新IDA8.3安装后需要做的一些完善工作(包括IDAPython报错、ChatGPT的模块安装、中文字符串的显示,各种问题解决方法合集)https://blog.csdn.net/donglxd/article/details/135243027如下图所示,在String窗口中,我们搜索下"取料支持同取"字符串,可以看到有一个结果,点击后,我们很方便的定位到调用它的代码处。

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

点击上面的搜索到的字符串来到字符串的定义位置,如下图所示: 关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

点击上图中字符串后面的引用代码地址,我们来到了如下图的地址处: 关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

选中如上图中的引用代码位置,然后按一下空格,切换到如下图的方框格模式,方便我们找到函数头,我们只要点击下图中红框处的函数规模总体预览图的最上面,就可以快速定位到函数头部。 

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

如下图:来到函数头部后,我们右击第一行代码,在弹出的菜单中选择Xrefs graph to来显示函数的调用链 关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

 如下图就是刚刚引用"同取"字符串之前运行的所有调用函数链。关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

 知道了函数调用链,我们接下去分析下,因为我们要找到设置CheckBox的公共变量,而设置CheckBox的操作,QT一定有相应的API函数,我们打开IDA搜索下导入表,如下图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

 至于那个API,查询微软的Copilot AI后,给出了下面的链接(QT系统学习系列:1.1 QAbstractButton(按钮抽象基类)),这个链接中说明了AbstractButton是checkbox的基类,CheckBox有两个函数setChecked和isChecked,分别是设置CheckBox和读取CheckBox状态。

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

然后我们再次使用Copilot查询setChecked函数的名称修饰,如下图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

所以,我们IDA查询到的第一个函数"_ZN15QABstractButton10setCheckedEb"就是setChecked,同样的方法查询到"_ZNK15QAbstractButton9isCheckedEv" 就是isChecked,既然知道了setChecked这个API函数,我们查找下引用他的地址有哪些,方法如下图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

 点击上图中的setChecked名称修饰,定位到下图中的函数输入表位置,右击后打开函数调用链图关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

 如下图所示,setChecked的调用链,咋一看很复杂是不是?是不是想放弃不接着看了,其实不用想的太复杂,有时答案就在眼前,只要你耐心查找。请接着读下去。

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

你们还记得,我们刚刚也查找过一个函数调用链吗? 对了,就是调用同取函数那个调用链,我们把两张图放一起对比下,如下图所示: 

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

 我用红笔圈出的两张图的相同之处,显然这个函数调用链(sub_4A2500-->sub_4A23E0-->sub_4362F0-->sub_491660-->sub_4CBB40)中的最后一链sub_491660-->sub_4CBB40中包含了sub_491230-->"_ZN15QABstractButton10setCheckedEb"(setChecked),所以我们只需找到sub_491230中的setChecked,以方便之后,我们定位到之前提到的公共变量位置。

我们先用IDA定位到sub_491230函数看看,因为里面有setChecked函数调用,具体的分析请看下图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

因为程序是X86的,所以我们用X32DBG调试下,如下图: 关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

可以看到内存地址74D0C8就是setChecked的公共变量参数(根据call esi得知,esp就是第一参数,而mov dword ptr ss:[esp],eax这句设置了esp,所以eax的赋值语句就是这个第一参数,也就是公共变量),打开主程序后运行启动,打开加工窗口后这个变量会一直存在,我们可以尝试设置下复选框,看看这个公共变量会改变吗?如下图:

 关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

可以看到公共变量74D0C8变成了00 00 01 01的格式,因为内存中是从高到低读取,所以我们需要的是从右往左数第二个字节的01 。关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

 既然我们知道了公共变量,让我们再来分析下程序的流程,根据之前的程序流程分析,在主程序页面点击加工后,公共变量就建立了(这点从退出加工页面就会重置"同取"设置就可以判断出来),所以我们从主程序页面的"启动"这个字符串"开刀",Strings搜索下"启动",如下图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

 下图是函数头部:

 关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

右击这个sub_433830,点击Xrefs graph to,查看函数调用链: 

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt函数sub_433830的调用链如下图右半部分,可以看到sub_433830的调用链在setChecked调用链的前面,和我们分析的一样:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

 如上图,我们需要判断设定公共变量74D0C8是否在蓝色部分的这些函数里? 所以我们先把蓝色部分的这些函数头部都下断点,使用之前文章中提到的二分法,逐步缩小区域即可。我们在x32dbg中使用bp命令快速下断点,如bp 4352C0,下断之后的效果如下:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

然后重新运行程序,把下面的内存也设置到公共变量74D0C8的地址观察变化。程序启动后,点击主界面的"启动"按钮,遗憾的是程序直接运行到了加工界面,断点并没有断下,而是需要点击加工界面里的配置才会断下,观察公共变量74D0C8发现,在进入加工界面后,就已经被设置,所以我们可以尝试sub_433830函数的另一边调用链,如下图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

我为了调试时,观察方便,把红框中下断的每个函数都注释了一个简称,如sub1、sub2这样的,方便辨认,并在X32dbg中也对应的注释了函数简称,如下图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

然后,我们用x32dbg重新运行程序,我们一边观察公共变量74D0C8的变化,一边在中断时按运行按钮,跳过不需要的断点,如果x32dbg不中断时,我们再切会贴片机程序正常操作下,如点击项目名、点击启动等,经过几次中断后,我发现公共变量74D0C8变化成我们需要的00 00 00 01了,如下图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

如上图,因为中断在sub5函数头部,所以设置公共变量的代码一定在sub4函数,然后我们可以使用,如下图的二分法,逐步缩小查找范围,定位到关键代码(记住每次都要重启程序调试,我们可以按空格键把不需要的断点关掉,加快调试速度。还有别忘了重启后每次都要在内存1中定位到公共变量74D0C8)。

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

通过上面的方法,我们很快定位到了关键函数,如下图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

如上图,可以看到运行过注释的这句关键点,下面的公共变量74D0C8变成了00 00 00 01,显然设置代码在这个函数(关键点)中,在这个关键函数上下断。

把不需要的断点取消,重新运行程序,按F7进这个函数看看,如图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

如上图,进关键函数后是一个大跳转,此时单步下去,并注意下面的公共变量74D0C8的值。

我们跟进这个大跳转,如图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

如上图,我们来到了设置公共变量74D0C8的关键函数处,粗略看了下都是mov的赋值操作,看来地方来对了。这个函数不长,我们一行行单步观察公共变量的值变化就好。 

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

如上图可知,我们运行了上面4行mov的赋值代码后,74D0C8变量成我们需要的值,但是这个00 00 00 01是不设置同取的变量。不知道大家还记得之前我们调试时,尝试点击"同取"复选框改变的值吗? 

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

就是上图第3个字节位,而我们再看这4句mov赋值,显然赋值的地址也是按ecx的寄存器累加上去,一位位的设置的,显然mov byte ptr ds:[ecx+0x02], 0x00,这句就是我们需要修改的,把后面的0x00改成0x01即可,如下图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt 

 然后右击修改的代码,点击补丁保存修改后的文件,我们可以另起一个名称,如下图:

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

 关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

然后我们运行下这个修改后的主程序看看。

关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路),开发语言,安全,windows,测试工具,qt

 可以看到,修改成功了,教程到此也写完了,感谢大家的耐心观看,本人不才,但是希望大家有学到新知识,谢谢!文章来源地址https://www.toymoban.com/news/detail-820901.html

到了这里,关于关于一个QT程序的简单破解思路(不需要分析信号和槽的方法,通用所有程序的破解思路)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一个QT程序无法启动问题的分析与解决

    最近调试设备,遇到了一个奇怪的问题:QT程序无法重启。 查看日志,发现报如下错误: QLock::QLock: Cannot create semaphore /tmp/qtembedded-0/QtEmbedded-0 \\\'d\\\' (22, Invalid argument) Cannot get display lock Aborted 下面整理记录问题的解决过程。 1 首先,说明程序之前奔溃了。 因为这是重启过程中报的

    2024年02月05日
    浏览(27)
  • 制作一个简单的C语言词法分析程序

    C语言的程序中,有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表,给出对应的识别码,然后跟据对应的表格来写出程序 程序主要有循环判断构成。不需推理即可产生的符号我们可以把它包装在函数中,返回值为对应的识

    2024年02月06日
    浏览(31)
  • 帮我写一个关于询问chatGPT进行提问的有效模板需要详细一点

    当您使用ChatGPT时,您可以通过以下步骤使用该模型: 选择一个可用的平台 ChatGPT可以在多个平台上使用,包括网站,应用程序和社交媒体。在选择使用的平台之前,您需要考虑您想要使用ChatGPT的原因以及您的用户基础。 配置API密钥 ChatGPT可以通过API密钥来访问。在使用之前

    2023年04月22日
    浏览(34)
  • 关于Qt编译android时候一个问题

    搞了三四天,搞的快崩溃了,问题提示为 修改问题 找到这个文件 注释下面的四行数据

    2024年02月16日
    浏览(27)
  • 优化QT的CPU占用率的一个思路,全网没看到这么详细的(有代码)

    引言:在最近的项目中,发现执行QT程序时,CPU占用率奇高,最高高达98%。 1、查看CPU占用率 - 指令 Linux终端输入: top 即可查看当前CPU占用率 2、优化CPU站占用率 遂专门来找谷哥和度娘讨讨经验。 总结目前网上的各种说法,原因有如下几点: 1、在paintEvent函数和update函数使用

    2024年02月17日
    浏览(28)
  • 文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb

    1.1 今天在编写代码的时候,突然想实现一个目标:怎样能够在自己的网站上发一些文章  (lingyidianke.com) 1.2 参考自己之前写的一些资料,做一做试试,那么怎么做呢?首先,我们参考一下我们之前的资料,之前写过的大事件资料: 1.2.1 从项目结构上看,我们要创两个项目 1

    2024年02月19日
    浏览(36)
  • 我的第一个项目(十一) :飞机大战分包完成(简单阐述分包思路以及过程)

    好家伙,   代码已开源 Git: https://gitee.com/tang-and-han-dynasties/panghu-planebattle-esm.git NPM: panghu-planebattle-esm - npm (npmjs.com)   现在,比如说,我用Vue写好了个人博客主页的前端 我想在这个主页里面加点东西,让我的博客更缤纷多彩一点 我想在他的主页里面塞个小游戏,他会怎么做   如下

    2023年04月18日
    浏览(22)
  • 【华为OD机试真题 Java语言】306、服务器广播、需要广播的服务器数量 | 机试真题+思路参考+代码分析

    🍂个人博客首页: KJ.JK   🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用Java语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习 🎃题目描述

    2024年02月08日
    浏览(25)
  • 致远OA破解思路,致远协同办公OA破解思路

    文章目录 前言 一、选择那种方式破解?         1、破解加密文件         2、破解class类 三、破解过程 四、成果展示 总结    致远OA实施过程中需要在测试环境中进行测试,但是申请的测试狗过期了,怎么办?修改日期,修改mac,这都是我们用过的办法。但是这些方法有一

    2024年02月15日
    浏览(30)
  • 创建一个简单的Qt工程

    1.打开QtCreator进行如下选择。(开软去官网下载即可,注册邮箱可以断网跳过) 第一步: 选择Application     第二步:这里文件名称和路径都不要有中文 第三步:选择编译模式 点击下一步 第四步:选择 Widget点击下一步   第五步:运行工程,判断是否创建成功 课堂小记: 1. 析

    2024年02月03日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包