lgjxj 发表于 2009-4-9 15:26:35

smc --->

难度很低,今天新版被流出,试了一下,脱壳好,SMC 好,不要我见到 NAG 就好

冷血书生 发表于 2009-4-9 16:22:11

沙发。。。。。。。。。。。。。。。。。。学习
支持,我顶

其实我不是灌水,占位等待更新。。。。。。。。。。。。

lgjxj 发表于 2009-4-9 16:31:18

UE 编辑 9 字节:loveliness:
汗,不用 9 字节

[ 本帖最后由 lgjxj 于 2009-4-9 16:35 编辑 ]

creantan 发表于 2009-4-9 16:35:26

板凳。。。
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 编辑 ]

lgjxj 发表于 2009-4-9 16:49:39

对,解开前头的代码就可以了,PATCH 吧

lgjxj 发表于 2009-4-9 16:59:09

9 字节就比较保险而尔

lgjxj 发表于 2009-4-9 22:12:06

等,有好几个方案,creantan 贴出的地址是对的,
但要如何 PATCH 就看大家了,粗略估计有 4 个地址可以
我只使用了2个地址

[ 本帖最后由 lgjxj 于 2009-4-9 22:20 编辑 ]

lgjxj 发表于 2009-4-9 23:20:59

解谜吧,怎样改还得自己思考一下

我空手来的,你自己看看 /:

CB 08 05 1F 18 0C CE CE

pptppt 发表于 2009-4-9 23:25:20

都是牛人,我是来学习的

lgjxj 发表于 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:,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
查看完整版本: smc --->