案例一主要行为:
通过查壳工具发现程序加UPX壳
尝试手脱
UPX是压缩壳,F8发现此时只有ESP寄存器值变红,说明程序正要为解压程序申请栈帧
于是选中esp,右键在数据窗口中跟随
输入command:hr 0x12FFA4,在栈的ESP处增加硬件断点,当解压程序执行完毕时,为了堆栈平衡,esp将重新指向这个地址,此时解压程序返回的目标地址就是程序的入口点OEP(original entry point)
直接点击运行,程序停下时到达OEP附近
F8跟进至长跳转,随后跟随跳转
到达OEP
用od插件或者LordPE把脱壳后程序dump出来
想要去除弹窗,首先要知道弹窗是如何产生的
弹窗产生的类型主要为消息框弹窗和浏览器弹窗
主要可能由以下系统API产生
方法一 在C32Asm等文件查看软件中,查找浏览器打开的链接对应的(ASCII 或 UNICODE)字符,然后将对应内容填充为00,这个方法可以对应绝大部分浏览器弹窗问题
方法二 对于少部分顽固浏览器弹窗而言,弹窗的地址是经过加密算法加密后进行保存的(可能性不大),此时可以在OD调试时,按下ctrl + G
,然后跳转至程序调用这些系统API的位置下断点,随后让程序运行起来,在调用API时查看参数,确认是否广告弹窗来源
在确认广告来源后,可以把调用函数的指令及前面的压栈过程用NOP指令填充,也可以把调用的整个过程的第一条指令改为retn指令
这个案例会有两个广告,一个是打开20s后会出现一个无法关闭的小窗,并且在使用界面内有一个嵌入式广告,在打开的同时还会把浏览器的主页绑定为特定网页
看到这里大多数人已经血压升高了吧
使用案例的方法追踪esp进行脱壳 但是我失败了,还是手艺不精 :- (
实际上,这种方法找到的OEP是没有问题的,但是不知道为什么脱壳不完全,可能是dump工具的原因,PEiD浅层查壳发现已经脱壳完毕,但深度查壳后发现还有ASPACK壳残留,故使用脱壳机进行脱壳,
这个弹窗的去除在脱壳完毕后显得尤为简单,将脱壳后程序拖进resource hacker,打开对话框选项,把对应的弹窗大小置零或者把对应资源直接删除即可
毫无疑问,还是通过系统API来实现此功能,这次出场的API分别是
RegCreateKeyExA/W
RegOpenKeyExA/W
RegDeleteKeyExA/W
可以把调用函数的指令及前面的压栈过程用NOP指令填充,也可以把调用的整个过程的第一条指令改为retn指令