smc --->
难度很低,今天新版被流出,试了一下,脱壳好,SMC 好,不要我见到 NAG 就好 沙发。。。。。。。。。。。。。。。。。。学习支持,我顶
其实我不是灌水,占位等待更新。。。。。。。。。。。。 UE 编辑 9 字节:loveliness:
汗,不用 9 字节
[ 本帖最后由 lgjxj 于 2009-4-9 16:35 编辑 ] 板凳。。。
01151F10 55 push ebp
01151F11 68 E8261501 push notepad_.011526E8
01151F16 64:FF32 push dword ptr fs:
01151F19 64:8922 mov dword ptr fs:,esp
01151F1C E8 E7F2FFFF call notepad_.01151208
{
01151208 53 push ebx //retn
01151209 56 push esi
0115120A 57 push edi
0115120B 55 push ebp
}
01151F21 68 3D1F1501 push notepad_.01151F3D
01151F26 64:FF35 0000000>push dword ptr fs:
01151F2D 64:8925 0000000>mov dword ptr fs:,esp
01151F34 31C0 xor eax,eax
[ 本帖最后由 creantan 于 2009-4-9 16:37 编辑 ] 对,解开前头的代码就可以了,PATCH 吧 9 字节就比较保险而尔 等,有好几个方案,creantan 贴出的地址是对的,
但要如何 PATCH 就看大家了,粗略估计有 4 个地址可以
我只使用了2个地址
[ 本帖最后由 lgjxj 于 2009-4-9 22:20 编辑 ]
解谜吧,怎样改还得自己思考一下
我空手来的,你自己看看 /:CB 08 05 1F 18 0C CE CE 都是牛人,我是来学习的
好,玩过就算了,真正解谜
如果版主见到,帮我编辑一下代码部分,乱码,我不会搞,上传一个去 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:,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:,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:,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:,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 2D486364PUSH 6463482D
0108ED4A 6A 60 PUSH 60
0108ED4C 6C INS BYTE PTR ES:,DX
0108ED4D 2D 5D7F6279 SUB EAX,79627F5D
0108ED52 68 6E79627F PUSH 7F62796E
0108ED57 2D 7B687F7E SUB EAX,7E7F687B
——————————————————————————————————
现在我们知道了断尾处经过 3 重解码
而我们要实现一句 MOV BYTE PTR,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 编辑 ]
页:
[1]
2