因为步骤很多,我怕贴错图了,你们看到有错误的请指正
尽可能写的详细啰嗦每步都载图上去,方便初学者能看得懂吧
QQ连连看单机版:qqllk.exe
使用到的工具:
CE
虚拟机win7平台32位
1.初始界面
我们发现打开一个真正程序经过了了两层广告。
当我们直接点击真正程序
OD打开发现wmain函数的代码都错误的,仿佛代码给人抽掉了。
总结:
qqllk.exe(大广告)->qqllk.ocx(小广告)->kyodai.exe(真正代码,但是它代码给抽取了),套路一层接着一层
1.找出真正的程序
1.1 使用PE工具查询基本信息
切记:别直接往OD丢一顿瞎跟,遇到很多call每个按回车键大概看一眼锁定一个最可疑的,千万别都跟进去(浪费时间)
一般分析程序流程应该是:
1.测试软件是否有BUG或则弱密码
2.使用PE工具、资源工具、火绒剑之类的辅助工具帮助你收集信息
3.有目标的用OD(IDA)跟踪
程序:VC6编写
壳:无加壳
TLS:无
异常:无(注意SetUnhandledExceptionFilter之类的函数)
切入点:CreateProcessA或则B(因为它要创建进程(百度广告))
3:使用OD工具跟踪程序
思路:
我们通过测试软件发现程序是通过打开2个广告,再运行真正的程序。
那么就下CreateProcessA或则W断点
2.1:大广告(QQ连连看启动器)
总结:
大广告调用小广告
2.2:小广告(百度连接)
思路:
直接下CreateProcessA或则W断点
可疑地方:
这里线程挂起很可疑,我们之前直接打开(真正程序)发现PE文件给修改,然而通过广告间接打开主程序却可以正常运行,我们可以怀疑是(小广告百度连接)把PE文件代码给还原的。
2.3 F8跟出去CreateProcess函数让线程创建完成
2.4 当程序挂起的时候用OD附加主程序(最好在恢复线程之前附加)
我们发现这软件是典型的VC6.0编写的:
找到wmain函数
此时wmain的代码还没被修复
2.5 当我们通过广告二(百度连接)运行起来再附加
总结:
我们可以推测程序是通过这两个广告修复才可以正常运行的。因为我们在第二个广告发现线程停,当运行完广告二(百度连接)程序的时候再附加真正程序就发现修复完毕,那么我们就可以判断程序是通过广告二(百度连接)在挂起线程与恢复线程之间修复完成的。
通过以上的特征:
我们可以大胆推断程序大概用到的API:
一般远程修改对方内存数据都是用到
//1.打开进程
OpenProcess 打开进程
//2.写入到对方进程空间中
参数说明:
BOOL WINAPI WriteProcessMemory(
_In_ HANDLE hProcess, //进程句柄
_In_ LPVOID lpBaseAddress, //要写的数据的指针
_In_ LPCVOID lpBuffer, //缓冲区地址
_In_ SIZE_T nSize, //要写入的字节
_Out_ SIZE_T *lpNumberOfBytesWritten //返回实际读取,写入字节
);
SuspendThread 暂停线程
ResumeThread 恢复线程
注意:
OD附加失败处理方法
2.6 开两个其中一个OD附加kyodai.exe在winmain下个断点,方便知道什么时候对它修改过
2.7:开两个OD其中一个OD附加广告二(百度链接)下WriteProcessMemory断点
F8执行完这个函数
并且记住修改的地址:43817A
转到另外一个附加的kyodai.exe主程序查看修改的地方 (刚好是wmain函数call里面)
当执行完WriteProcessMemory函数,然后跟进wmaincall里面发现代码给修复了
2.8 可以在程序执行完WriteProcessMemory就把主程序Dump出来或则在恢复线程ResumeThread恢复线程之前Dump出来
2.9:使用ImportREC修复IAT表
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)