随便用OD或进制工具到下面地址修改代码,主要是为了显示格式的需要,我们把原来的格式反转过来为 ID + 路径方式
代码:
地址:00462598
原始:25 73 20 28 25 30 38 58 29
修改:28 25 30 38 58 29 20 25 73
第二步
关键位置在第一处,第二处不改正常情况没发现什么问题,不过感觉第二处有可能会有经过的时候,所以一起改掉,如果日后发现有问题请自己改回,这里的修改主要是为配合第一处修改后的参数传递顺序,也改为 ID + 路径的方式
第一处:
原始
代码:
0041C034 51 PUSH ECX
0041C035 52 PUSH EDX
十六进制代码:51 52
修改
代码:
0041C034 52 PUSH EDX
0041C035 51 PUSH ECX
十六进制代码:52 51
第二处:
原始
代码:
0041C13D . 51 PUSH ECX
0041C13E . 52 PUSH EDX
十六进制代码:51 52
修改
代码:
0041C13D 52 PUSH EDX
0041C13E 51 PUSH ECX
十六进制代码:52 51
第三步
上面改好后现在就已经可以正常显示了,但当打开进程的时候就会出错,简单分析了一下代码,程序是通过把得到的 PID + 路径按原来的路径加 PID 的方式去处理的,就导致无法打开进程,这里用了个取巧的方法,在不影响正常显示的情况下我们把我们得到的 PID + 路径字符串在程序处理打开进程之前还原回 路径 + PID 的方式然后在让程序去继续处理。
代码如下,下面代码的主要作用其实就是相当于把字符串按需要的格式翻转,有需要的朋友简单跟一下就明白了,就不注释了,很简单的东西。顺便说一下,这段代码我放到了.DATA 段,好处是这个段的属性是可读,可写,可执行,所以后面的数据处理也在这个段里处理的,不过原程序中没用空间,所以我把这个段的 RSIZE 调整到了0x2000 如果大家修改自己的版本,可以自己处理这个问题。
下面代码可以利用 OD 的 NonaWrite 1.2 插件直接插入程序。
代码:
0041C59C - E9 5FFC0500 JMP 0047C200
0x0047c200:
LEA EDI,DWORD PTR SS:[ESP+26C]
pushad
pushfd
MOV EDX,EDI
push 0
CALL DWORD PTR DS:[44D234]
ADD EAX,7CE00
MOV ESI,EDI
MOV EDI,EAX
xor ebx,ebx
mov bl,cl
sub bl,0b
ADD ESI,0B
MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
DEC BL
TEST BL,BL
JNZ SHORT 0047C227
MOV BYTE PTR DS:[EDI],20
INC EDI
MOV BL,0A
MOV ESI,EDX
MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
DEC BL
TEST BL,BL
JNZ 0047C23b
MOV BL,CL
MOV ESI,EAX
MOV EDI,EDX
MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
DEC BL
TEST BL,BL
JNZ 0047C24C
POPFD
POPAD
JMP 0041C5A3