注册

CpuDbg x96

查看: 3777|回复: 0
收起左侧

[多款调试器] 通过信息窗口修改内存,反汇编窗口未修改

[复制链接]
发表于 2024-6-15 00:57:54 | 显示全部楼层 |阅读模式
[Asm] 纯文本查看 复制代码
004013C3    8965 E8         MOV DWORD PTR SS:[EBP-0x18],ESP
004013C6    FF15 44404000   CALL NEAR DWORD PTR DS:[<&KERNEL32.GetVersion>]           ; kernel32.GetCommandLineA
004013CC    33D2            XOR EDX,EDX
004013CE    8AD4            MOV DL,AH
004013D0    8915 28554000   MOV DWORD PTR DS:[0x405528],EDX
004013D6    8BC8            MOV ECX,EAX
004013D8    81E1 FF000000   AND ECX,0xFF
004013DE    890D 24554000   MOV DWORD PTR DS:[0x405524],ECX
004013E4    C1E1 08         SHL ECX,0x8
004013E7    03CA            ADD ECX,EDX
004013E9    890D 20554000   MOV DWORD PTR DS:[0x405520],ECX
004013EF    C1E8 10         SHR EAX,0x10
004013F2    A3 1C554000     MOV DWORD PTR DS:[0x40551C],EAX
004013F7    33F6            XOR ESI,ESI
004013F9    56              PUSH ESI
004013FA    E8 A1090000     CALL TraceMe.00401DA0
004013FF    59              POP ECX
00401400    85C0            TEST EAX,EAX
00401402    75 08           JNZ SHORT TraceMe.0040140C
00401404    6A 1C           PUSH 0x1C
00401406    E8 B0000000     CALL TraceMe.004014BB
0040140B    59              POP ECX
0040140C    8975 FC         MOV DWORD PTR SS:[EBP-0x4],ESI
0040140F    E8 E1070000     CALL TraceMe.00401BF5
00401414    FF15 40404000   CALL NEAR DWORD PTR DS:[<&KERNEL32.GetCommandLineA>]      ; kernel32.GetCommandLineA
0040141A    A3 185A4000     MOV DWORD PTR DS:[0x405A18],EAX





通过信息窗口修改内存,反汇编窗口未修改

通过信息窗口修改内存,反汇编窗口未修改



上面的图中地址  004013C6  是调用GetVersion 函数,
如果我们通过信息窗口将 GetVersion 函数改成 GetCommandLineA 函数.
会发现反汇编的内容没有变, 下图是 od yzdbg x32dbg 和 cpudbg 修改后的图.
图中未修改的地方有黄圈标注, 已修改的用红圈标注.

yzdbg信息窗口修改BUG

yzdbg信息窗口修改BUG



yzdbg修改后, 数据窗口的值修改了,并且高亮红色显示,
其它的包括数据窗口中的API名,以及反汇编窗口中的API名称都未修改,
yzdbg备注没有显示API.


od信息窗口bug

od信息窗口bug


od修改后, 同样反汇编窗口和数据窗口的API名没有刷新,
但是od的备注里面的API是改变了.

x32dbg信息窗口BUG

x32dbg信息窗口BUG


x32dbg 修改后的效果和od是一样的.只是少了一个备注.

cpudbg信息窗口修改无BUG

cpudbg信息窗口修改无BUG


最后测了一下我们的cpudbg调试器, 可以看到所有地方都修改了.
只是我们的数据窗口还未添加IAT识别.备注栏也没添加API函数名.
------------------------------------------------------------------
试想一下,如果有一个壳将程序代码段中用到的IAT随机写入其它API.
然后通过TLS或者构造来还原,那使用这些调试器的用户看到了是不是造成混淆?
实际上我并没有这样测试过,因为随意修改IAT, 也许程序初始化或其它地方在未到达EP前有调用,
也会导致程序出问题. 想要做到随意修改IAT,那得大量的测试才行.得保证其它地方未使用到.

实时刷新反汇编和数据窗口开销也是有点大的. 也许单步步入和步过用户察觉不到.
但如果是trace的话,就能明显感觉到性能下降了.


回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注册

QQ|Archiver|手机版| CpuDbg x96

GMT, 2024-12-30 18:32 , Processed in 0.062500 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表