-
-
Riijj系列之cm13分析
-
发表于:
2013-1-30 18:56
11366
-
Riijj系列之cm13分析
工具:IDA6.1(主角)+WinDBG(主角)+OD(配角)
系统:WinXP sp3
CM :下载cm13 riijjcm13.zip
这一次调试会用到WinDBG内核态调试虚拟机,而在虚拟机内部用WinDBG和IDA调试,开三个调试器同时调强大吧,
Come On!
一、分析程序
看下程序流程
释放bin资源保存为wood文件,以调试模式创建wood进程,起初wood代码区全部为CC指令,
一执行就会出发异常由调试程序捕获异常后,在产生异常的地址,写入一条指令设置指令寄存器地址指向该写入指令。
然后清除上一条指令为CC,(让wood一致以异常形式执行然后接受所要执行的指令代码)wood的代码全部保存在主进程中。
主进程的结构很简单,拿IDA看一下就清楚了,而从临时目录下取出wood文件用IDA分析,只能看到数据部分及导入表函数,代码全部为CC填充,创建对话框获取对话框内容以及算法部分都在wood中。
首先,wood进程的代码部分由主进程填充,所以要获得完整wood代码并调试应该将上图中填充部分注释掉,否则始终得不到完整的Wood代码。
应该用OD工具将第二个WriteProcessMemory注释掉如下图
Nop后保存为cm13_1.exe
调试
关键是如何调试wood进程呢?
在用户态调试不能从打开方式调试这样的话,调试器调试的是主进程,创建wood后无法切换到wood进程(目前为止,本人不知道如何跳入,知道的兄弟可以告诉我,谢谢~),而先运行主程序以附加方式调试wood进程的话,因为wood是以调试模式创建的
DebugPort端口已经被占用了,无法附加!
试想是否可以运行主程序,待写入wood完成后,暂停主程序并清除wood进程的DebugPort端口,这时再用WinDBG附加调试呢
这样的话清除DebugPort可以在WinDBG以内核模式远程调试虚拟机进行。在虚拟机内部用WinDBG附加wood(有不清楚地方可以参考前面几篇文章)
说着比较复杂,不仅用WinDBG调试虚拟机,而在虚拟机内部又使用IDA和WinDBG调,相当于开了三个调试器,
能解决问题就OK了,所以行动吧少年~
1.双机调试模式运行WinDBG,开启虚拟机启动菜单时选择调试运行,调试器断下后F5运行稍等片刻虚拟机进入桌面
2.在虚拟机中IDA载入修改过的cm13_1.exe,选择Local Win32 debugger调试器后运行后,
一定要在输入
Name:AJISky
Serial:123456789
点击注册按钮运行一次,这样才能保证,写wood代码完全,否则算法部分有可能没有写入,事实证明就是这样
3.切换到WinDBG暂停系统,
1)输入命令!Process 0 0查看系统运行的进程信息
kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
....
PROCESS 81fc8da0 SessionId: 0 Cid: 07d0 Peb: 7ffde000 ParentCid: 0114
DirBase: 08d802c0 ObjectTable: e1ae7648 HandleCount: 57.
Image: crackme13_1.exe
PROCESS 81bf4b28 SessionId: 0 Cid: 07dc Peb: 7ffdd000 ParentCid: 07d0
DirBase: 08d80300 ObjectTable: e224e7d0 HandleCount: 35.
kd> .process 81bf4b28
Implicit process is now 81bf4b28
WARNING: .cache forcedecodeuser is not enabled
kd> dt _eprocess 81bf4b28
ntdll!_EPROCESS
+0x000 Pcb : _KPROCESS
+0x06c ProcessLock : _EX_PUSH_LOCK
+0x070 CreateTime : _LARGE_INTEGER 0x1cdfeb6`c2f16d7c
+0x078 ExitTime : _LARGE_INTEGER 0x0
+0x080 RundownProtect : _EX_RUNDOWN_REF
+0x084 UniqueProcessId : 0x000007dc Void
+0x088 ActiveProcessLinks : _LIST_ENTRY [ 0x8055b258 - 0x81fc8e28 ]
+0x090 QuotaUsage : [3] 0x7d0
+0x09c QuotaPeak : [3] 0x848
+0x0a8 CommitCharge : 0x110
+0x0ac PeakVirtualSize : 0x1325000
+0x0b0 VirtualSize : 0x1325000
+0x0b4 SessionProcessLinks : _LIST_ENTRY [ 0xf89b7014 - 0x81fc8e54 ]
+0x0bc DebugPort : 0x8200a318 Void
+0x0c0 ExceptionPort : 0xe145ee10 Void
...........
kd> dd 81bf4b28+0xbc
81bf4be4 8200a318 e145ee10 e224e7d0 e131f99d
81bf4bf4 00000001 b1811c9c 00000000 00040001
81bf4c04 00000000 81bf4c08 81bf4c08 00000000
81bf4c14 0001bfc8 00000001 b1811cf4 00000000
81bf4c24 00040001 00000000 81bf4c2c 81bf4c2c
81bf4c34 00000000 00000000 00000000 00000000
81bf4c44 81aea6f0 81ffd9f8 00000000 000000ef
81bf4c54 00000000 e1ae3280 00000000 e2262220
kd> dd 81bf4b28+0xbc
81bf4be4 00000000 e145ee10 e224e7d0 e131f99d
81bf4bf4 00000001 b1811c9c 00000000 00040001
81bf4c04 00000000 81bf4c08 81bf4c08 00000000
81bf4c14 0001bfc8 00000001 b1811cf4 00000000
81bf4c24 00040001 00000000 81bf4c2c 81bf4c2c
81bf4c34 00000000 00000000 00000000 00000000
81bf4c44 81aea6f0 81ffd9f8 00000000 000000ef
81bf4c54 00000000 e1ae3280 00000000 e2262220
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)