本帖最后由 丿猎狐 于 2018-10-10 07:55 编辑
刚步入破解领域的小小白请移步到此贴:https://www.52pojie.cn/thread-802225-1-1.html
小弟先前不懂规矩哈,被H大禁掉了帖子,这回编辑好后重发一下
经过这次教训,希望和我一样新来的朋友发“转贴”时要注意图片水印和某某论坛软件标题等等,谢谢!
这种帖子吾爱我好像没有找到,所以去别处找了放在这把
如遇到关于按钮事件特征码的,我会再次整理到这的
简洁版:
《《《Delphi程序》》》
特征码:FF 93 20 01 00 00 5B C3 53
-----------------------------------------------------------------------------
《《《易语言程序》》》
特征码:FF 55 FC 5F 5E 89 5D F4
特征码来源:krnln.fnr
-----------------------------------------------------------------------------
《《《MFC程序》》》
RELEASE
特征码:FF 55 14 EB 7F FF 75 0C
特征码来源:MFC42.DLL
DEBUG
特征码:FF 55 FC E9 48 04 00 00 33 C9
特征码来源:MFC42D.DLL
-----------------------------------------------------------------------------
使用方法:OD载入程序---F9运行---Alt+M打开内存镜像---Ctrl+B搜索特征码---Ctrl+G跳到找到的地址---F2下断---点击按钮---断下后F7进入CALL(此处即为事件代码)
说明:对于Delphi程序和易语言程序,根据目前测试的情况来看,都是一击必杀,例无虚发
对于MFC程序只取了VC++6.0的特征码
易语言程序下断后,可能界面没出来就断下了,这是因为断下的是[启动窗口创建完毕事件]或[时钟周期事件]
图文版:
Delphi & BC++
使用Detect it Easy工具确定软件使用的编译器为Delphi或者是BC++,这两个编译器的按钮特征码相同。
OD载入程序,反汇编窗口右键->查找->二进制字符串:
然后在HEX窗口输入特征码,注意Delphi和BC++的特征码是相同的(“740E8BD38B83????????FF93????????”):
注意勾选整个块。
特征码中的问号代表任意数据。
在特征码的下面都会传下一个CALL,然后我们在每个特征码的下面的CALL下断点:
然后CTRL+L,在所有的特征码下面的CALL下断点。因为我们不知道是哪一个按钮,所以需要在每个按钮都下断点,如果程序比较小,很快,如果程序比较大,按钮事件比较多,可以使用脚本来下断点。
断点下完之后,F9运行程序,然后点击关键的注册之类的按钮,程序会停当前按钮的CALL处,然后F7进CALL,就可以找关键CALL和关键跳了。
VB
使用同样的方法搜索VB的特征码(“816C24”):
在每个jmp处下断点,然后运行程序,来到断点处,jmp跟过去之后就是按钮事件的处理过程了。
MFC
注意,使用MFC和VC++编写的程序,使用PEiD查壳时,都会显示是Visual C++6.0的编译器,两者的区分方法是,使用OD载入程序,在E窗口中,MFC的程序会调用一个mfc42.dll的动态链接库文件,而VC++的程序不会调用这个库。
载入MFC程序,在E窗口中双击mfc42.dll,跟进去,然后反汇编窗口中右键->查找->命令:
“sub eax,0a”,找到之后,在特征码的下面会有一个je跳转,选中je命令行,然后按回车,程序会跟随到跳转处,来到目标地址,找下面的一个CALL,下断点:
如果je跳转之后,没有CALL,那就不用管这个特征码,继续查找下一个特征码,直到找到所有的CALL为止。
然后全速运行程序,点击按钮之后,程序会在断点处停止,然后在上下文找关键CALL和关键跳即可。
易语言
注意,易语言编写的程序,使用PEiD查壳时,显示的编译器也是Visual C++6.0,使用OD载入程序,直接在反汇编窗口中右键->查找->二进制字符串,输入易语言的特征码:“FF 25”,如果能够找到,就说明是易语言编写的程序。
可以看到有一堆的jmp指令,以上就能判断是易语言程序。下一步查找易语言的按钮事件:二进制字符串“FF 55 FC 5F 5E»ò(e-debug)”,找到之后,会来到CALL处,直接下断:
查找剩下的,所有地方都下断点,然后F9运行程序开始调试。易语言程序还可以使用另一种方式来查找按钮事件,使用E-debug工具:
使用OPEN载入易语言程序,然后点击START,运行程序,点击按钮,会显示事件发生的地址:
记下事件发生的地址,然后使用OD载入程序,跟踪到这个地址下断点:
Ctrl+G,输入要跟随的表达式,输入刚才记录的地址,下断点:
VC++
使用PEiD查壳,查找的编译器为VC++6.0,如果找不到易语言和MFC的标志,那就可以判断是vc++写的程序,按钮事件查找方法,直接OD载入程序,在反汇编窗口右键->查找->所有命令,输入特征码:“sub eax,0a”:
双击跟进去,在下面会有一个je:
选中之后,回车,跟过去,在下面的CALL下断点:
按照上面的方式找到所有的CALL下断点。
然后F9运行程序,点击按钮,程序来到断点处,F7跟进去,注意,进去之后还不是核心按键处理程序,按两次F8之后,才来到核心代码处:
万能断点
不需要知道程序使用的编译器和编译语言,直接OD载入程序,直接运行程序,输入假码之后,不要点击按钮:
查看user32模块:
来到user32模块之后,搜索特征码,右键->查找->二进制字符串:“F3A58BC883E103F3A4E8”
然后下断点,找到所有的都要下断点。然后回到程序,点击按钮,程序暂停,返回OD,alt+F9,执行到用户代码:
然后就到了按键事件处理的代码了。 如不全,请朋友们在下方评论区留言,我会为大家搜集整贴!
最后,如果您觉着此贴可以帮助到您,那么您可以献上您的热心,谢谢!
|