- UID
- 242
注册时间2005-3-6
阅读权限40
最后登录1970-1-1
独步武林
该用户从未签到
|
楼主 |
发表于 2009-4-10 00:07:18
|
显示全部楼层
好,玩过就算了,真正解谜
如果版主见到,帮我编辑一下代码部分,乱码,我不会搞,上传一个去 NAG 的例子
本想去断尾 SMC 的,(这里如何追那个启动NAG的就不说了,很简单)
但我忘了这个壳是多重解出断尾,但不重要。追进去一看,原来分了三段解出
_________________________________________________________________
0108E811 B8 A4E70800 MOV EAX,8E7A4
0108E816 03C5 ADD EAX,EBP
0108E818 81C0 93000000 ADD EAX,93
0108E81E B9 48060000 MOV ECX,648
0108E823 BA F646FB51 MOV EDX,51FB46F6
0108E828 3010 XOR BYTE PTR DS:[EAX],DL DL 作为解码 KEY,这里是 0xF6
0108E82A 40 INC EAX
0108E82B 49 DEC ECX
0108E82C ^ 0F85 F6FFFFFF JNZ 0108E828
0108E832 E9 04000000 JMP 0108E83B
_________________________________________________________________
0108EB1C 0800 OR BYTE PTR DS:[EAX],AL
0108EB1E 03C5 ADD EAX,EBP
0108EB20 81C0 9B030000 ADD EAX,39B
0108EB26 B9 40030000 MOV ECX,340
0108EB2B BA B7F506C8 MOV EDX,C806F5B7
0108EB30 3010 XOR BYTE PTR DS:[EAX],DL key is 0xB7
0108EB32 40 INC EAX
0108EB33 49 DEC ECX
0108EB34 ^ 0F85 F6FFFFFF JNZ 0108EB30
0108EB3A E9 04000000 JMP 0108EB43
__________________________________________________________________
0108EC1F B8 A4E70800 MOV EAX,8E7A4
0108EC24 03C5 ADD EAX,EBP
0108EC26 81C0 A1040000 ADD EAX,4A1
0108EC2C B9 3A020000 MOV ECX,23A ; 解码长度,这里垃圾啊,作者要检讨了
0108EC31 BA 4C88F1DA MOV EDX,DAF1884C ; EDX 作为解码 key is 0x4C
0108EC36 3010 XOR BYTE PTR DS:[EAX],DL
0108EC38 40 INC EAX
0108EC39 49 DEC ECX
0108EC3A ^ 0F85 F6FFFFFF JNZ 0108EC36
0108EC40 E9 04000000 JMP 0108EC49
__________________________________________________________________
OK 走完这里就解除了 断尾的 RETN
断尾原代码
0108ED42 CE INTO 这个 0xCE 就是没经 3 重解码的原样
0108ED43 59 POP ECX
0108ED44 65:68 2D486364 PUSH 6463482D
0108ED4A 6A 60 PUSH 60
0108ED4C 6C INS BYTE PTR ES:[EDI],DX
0108ED4D 2D 5D7F6279 SUB EAX,79627F5D
0108ED52 68 6E79627F PUSH 7F62796E
0108ED57 2D 7B687F7E SUB EAX,7E7F687B
——————————————————————————————————
现在我们知道了断尾处经过 3 重解码
而我们要实现一句 MOV BYTE PTR[1151208],0C3 // smc
对应的 16 进码 C6 05 08 12 15 01 C3 当然我们还要它返回到实际地方,后面还要一个 c3
那就是 C6 05 08 12 15 01 C3 C3 了
好由于我测试过 108EC24 处的代码没用,于是我就借它的宝地一用
但我们要给他们实现3重解码后,变成我们要实现的代码,那还需要把 C6 05 08 12 15 01 C3 C3 逆推出需要的代码
就写一个 C 程序
#include <iostream>
int main()
{
int smc[]={0xc6,0x5,0x8,0x12,0x15,0x1,0xc3,0xc3};
int i,j,s,temp;
for(i=0;i<8;i++)
{
temp=smc;
temp^=0x4C;
temp^=0xB7;
temp^=0xF6;
if(temp<0x10)
cout<<"0"; // 由于 16 进制粘贴,需要一个 0 ,譬如 05 这样才不会出现错误
cout<<hex<<temp<<" ";
}
cout<<endl;
return 0;
}
这样就可以得到对应的 CB 08 05 1F 18 0C CE CE 了,下一步如何做,
当然是 直接在断尾 0108ED42 开始二进制粘贴啦,保存一下,你在双击,就不见了 NAG 直接启动程序了 /:018
[ 本帖最后由 Luckly 于 2009-4-10 13:52 编辑 ] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入我们
x
评分
-
查看全部评分
|