能力值:
( LV12,RANK:1010 )
2 楼
大牛冒泡啊~~~
能力值:
(RANK:1060 )
3 楼
[QUOTE=;]...[/QUOTE]
PatchByte(EA, Value)
能力值:
(RANK:350 )
4 楼
供参考,你根据情况再调整一下。
#include <idc.idc>
static main()
{
auto i,j,from,size;
from=0x401000; //起始地址,你指定一下
size=0x100;//扫描数据块大小
for ( i=0; i < size;i++ ) {
//查找 0F 82 07 ?? ?? ??,替换90
if ((Byte(from)==0x0f)&&(Byte(from+1)==0x82)&&(Byte(from+2)==0x07))
{
for(j=0;j<5;j++)
{
PatchByte(from,0x90);
from++;
}
continue;
}
//查找 0F 83 01 ?? ?? ??,替换90
if ((Byte(from)==0x0f)&&(Byte(from+1)==0x83)&&(Byte(from+2)==0x01))
{
for(j=0;j<5;j++)
{
PatchByte(from,0x90);
from++;
}
continue;
}
from++;
}
Message("\n" + "OK\n");
}
能力值:
( LV12,RANK:1010 )
5 楼
偶用winhex 和IDA一边看jz 、jnz/ jo、jno/js、jns。。。/call
然后一一个替换的。。。
好累啊。
感谢LS几位的热心帮助
能力值:
( LV2,RANK:10 )
6 楼
#include <idc.idc>
static main()
{
auto i,j,from,size,fromend,address;
from=0x1BF15D0; //起始地址,你指定一下
fromend=0x01BF1C28;//结束地址
while (from<=fromend)
{
//查找 74 ?? 75 ?? jz jnz
if ((Byte(from)==0x74)&&(Byte(from+2)==0x75))
{
if (Byte(from+1)==(Byte(from+3)+2)) //确认是跳到同一地址
{
j = Byte(from+3);
from = from + 4;
for (i = 0;i<j;i++)
{
PatchByte(from,0x90);
from++;
}
}
continue;
}
//查找 68 ?? ?? ?? ?? C3 push ret
if ((Byte(from)==0x68)&&(Byte(from+5)==0xc3))
{
address = Dword(from+1);
from = from +6;
while (from < address)
{
PatchByte(from,0x90);
from ++;
}
continue;
}
from ++; //这里用跳到下一条指令会更准确 但我不知道用什么函数
}
Message("\n" + "OK\n");
}
能力值:
( LV2,RANK:10 )
7 楼
from ++; //这里用跳到下一条指令会更准确 但我不知道用什么函数
from = NextHead(from, BADADDR);
能力值:
(RANK:1060 )
8 楼
NextNotTail(ea)
能力值:
( LV15,RANK:2473 )
9 楼
『外壳开发』组长啥juhua都懂啊
能力值:
( LV2,RANK:10 )
10 楼
long FindBinary (long ea,long flag,string str);
// str - a string as a user enters it for Search Text in Core
// example: "41 42" - find 2 bytes 41h,42h
// The default radix depends on the current IDP module
// (radix for ibm pc is 16)
其实用FindBinary不更好,还支持通配符呢
能力值:
( LV9,RANK:1210 )
11 楼
我更喜欢写插件
to ccfer: 因为组长是我们的导师
能力值:
( LV2,RANK:10 )
12 楼
哈哈 都是高手啊 FindCode(ea,1) 也可以
能力值:
( LV2,RANK:10 )
13 楼
花指令去除后 很多的nop 看起来还是不方便 怎么把他们在图形视图里都隐藏掉?
能力值:
( LV12,RANK:760 )
14 楼
......貌似花不是太邪恶的~
上次一个壳加密后到处看起来都是花,结果去完花就彻底崩溃了,去了花,但是那些花就是VMCODE,所以去了花,关键代码都消失了....
能力值:
( LV2,RANK:10 )
15 楼
你可以用HideArea()将这些NOP隐藏起来
能力值:
( LV2,RANK:10 )
16 楼
关注 学习!
能力值:
( LV4,RANK:50 )
17 楼
顶起!
请问大牛有没有更方便方法?
貌似我不能用WinDbg调试sys文件
能力值:
( LV2,RANK:10 )
18 楼
ultraedit 的正则表达式也相当好用的,
经常用它来做比较复杂的替换
能力值:
( LV2,RANK:150 )
19 楼
关键是将jb xxxx jnb xxxx 改为jmp xxxx。根据lz提供的图片jb和jnb要跳转的是同一个地址,那不就等于无条件跳转JMP了吗。
能力值:
( LV12,RANK:1010 )
20 楼
人家做花指令就是干扰静态反汇编的,改成NOP撒...
能力值:
( LV4,RANK:50 )
21 楼
有什么工具可以动态调试SYS文件么?
WinDbg行么?怎么貌似我的不行?
能力值:
( LV12,RANK:1010 )
22 楼
好多都可以.
syser.windbg.softice...
你的不行就是RPWT了.
能力值:
( LV2,RANK:150 )
23 楼
根据图片信息用IDA模拟结果如下:
10460 E9 17 01 00 00 90 90 90 90 90 8D 85 38 FF FF FF
10470 50 6A 14 68 40 22 01 00 E8 23 FE FF FF 0F 82 07
10480 00 00 00 0F 83 01 00 00 00 E8 8D 85 38 FF FF FF
10490 50 8D 85 98 FD FF FF 50 FF 15 B4 20 01 00 8D 85
104A0 78 FD FF FF 50 8D 85 98 FD FF FF 50 FF 15 AC 20 seg000:00010460 E9 17 01 00 00 jmp loc_1057C
seg000:00010460 ; ---------------------------------------------------------------------------
seg000:00010465 90 db 90h ;
seg000:00010466 90 db 90h ;
seg000:00010467 90 db 90h ;
seg000:00010468 90 db 90h ;
seg000:00010469 90 db 90h ;
seg000:0001046A ; ---------------------------------------------------------------------------
seg000:0001046A 8D 85 38 FF FF FF lea eax, [ebp-0C8h]
seg000:00010470 50 push eax
seg000:00010471 6A 14 push 14h
seg000:00010473 68 40 22 01 00 push offset unk_12240
seg000:00010478 E8 23 FE FF FF call loc_102A0
seg000:0001047D 0F 82 07 00 00 00 jb near ptr loc_10489+1
seg000:00010483 0F 83 01 00 00 00 jnb near ptr loc_10489+1
seg000:00010489
seg000:00010489 loc_10489:
seg000:00010489
seg000:00010489 E8 8D 85 38 FF call near ptr 0FF398A1Bh
seg000:00010489 ; ---------------------------------------------------------------------------
seg000:0001048E FF db 0FFh
seg000:0001048F FF db 0FFh
seg000:00010490 ; ---------------------------------------------------------------------------
seg000:00010490 50 push eax
seg000:00010491 8D 85 98 FD FF FF lea eax, [ebp-268h]
seg000:00010497 50 push eax
seg000:00010498 FF 15 B4 20 01 00 call ds:dword_120B4 ; RtlInitUnicodeString
seg000:0001049E 8D 85 78 FD FF FF lea eax, [ebp-288h]
seg000:000104A4 50 push eax
seg000:000104A5 8D 85 98 FD FF FF lea eax, [ebp-268h]
seg000:000104AB 50 push eax
seg000:000104AC FF 15 AC 20 xx xx call dword ptr ds:xxxx20ACh
其关键代码为:
seg000:0001047D 0F 82 07 00 00 00 jb near ptr loc_10489+1
seg000:00010483 0F 83 01 00 00 00 jnb near ptr loc_10489+1
seg000:00010489
seg000:00010489 loc_10489:
seg000:00010489
seg000:00010489 E8 8D 85 38 FF call near ptr 0FF398A1Bh
seg000:00010489 ; ---------------------------------------------------------------------------
seg000:0001048E FF FF dw 0FFFFh
seg000:00010490 ; ---------------------------------------------------------------------------
seg000:00010490 50 push eax
将00010489处的call指令取消(U命令),从其下一个字节0001048A开始编码(C命令)得到以下结果:
seg000:0001047D 0F 82 07 00 00 00 jb loc_1048A
seg000:00010483 0F 83 01 00 00 00 jnb loc_1048A
seg000:00010483 ; ---------------------------------------------------------------------------
seg000:00010489 E8 db 0E8h ; ?
seg000:0001048A ; ---------------------------------------------------------------------------
seg000:0001048A
seg000:0001048A loc_1048A:
seg000:0001048A
seg000:0001048A 8D 85 38 FF FF FF lea eax, [ebp-0C8h]
seg000:00010490 50 push eax
可见call指令是假的,即E8为费字节,也就是所谓的“花指令”。