1625-5 王子昂 总结《2017年10月26日》 【连续第391天总结】
A. CrackMe41–patch
B.
解压有一个Rules文件和EXE
说明显示EXE是Delphi写的
Rules说明需要为EXE的菜单栏的Exit添加确认弹窗,当点击Yes的时候才退出,否则无效
试运行,发现一级菜单Ficken下有两个二级菜单项,分别是About和Exit
点击About将会弹出看规则的提示,点击Exit毫无反应
于是先用DeDe反编译一下看看:
可以看到,About有一个OnClick事件,很明显就是那个弹窗了;而Exit连事件都没有……这个添加的就麻烦啦,如果有事件只是做别的事情那么很好Hook,然而没有事件就意味着还要给他加个事件咯
IDA反编译一下,跟着字符串找到了About2Click事件:
很明显调用方法应该是把事件作为Callback设置到Windows消息处理函数中,是个动态过程,因此查看交叉引用当然是找不到的
只好在OD中的43E270处下断,然后查看调用堆栈啦:
可以看到是从42F42E调用过来的,它应该就是消息处理函数咯
在IDA中分析42F42E:
根据反汇编可以发现,函数地址和参数等等都是依靠v2=result,即eax/ebx的
那么这个地址大概率就是控件结构体的指针了
重新在42F42E所在函数的第一行下断,再次点击,可以发现ebx中的确存放着很多信息,包含Caption和onClick的字符串
那么最简单的方法就是手动为Exit控件增加callBack啦:
首先找CallBack放置的地址,OD拖到最后发现0x43E4BC往后都是00,我们就把函数放这儿吧
直接写汇编或者自己手动写C函数然后反汇编都可以
C语言就是: