首页
社区
课程
招聘
[旧帖] 破解思路总结 0.00雪花
发表于: 2009-4-9 10:14 4216

[旧帖] 破解思路总结 0.00雪花

2009-4-9 10:14
4216
破解思路总结

预备: 双击程序,看看能不能正常运行,和看看一些基本信息
   
1.基本都是马上用 OD 打开(PEID 基本废了),一看有壳,无视,
  SHIFT+F9 看看能不能跑起
  不能,精神来了,先看看它的  anti 是如何实现的
  
2. 如果上面运气好,能跑起来,万能断点看看能不能断,不能就对各有
   可能的 API 下段(OD 插件全选,菜啊,就是不给他们漏掉),这样的
   坏处是如果作者把API头部偷掉,将要死掉,当然那还是有办法的
   (和拼下面的 :如果怀疑有这种可能性被偷掉的,用插件选上有可能的 API ,然后就可以在 断点窗口见到
   这些 API 的地址,用 UE 编辑一下,写个脚本在 每个断点 +6 (这个数字你自己定义),这样一跑
   基本就可以 F 掉,偷代码的小动作,当然这是其中的一种方法。对于有大量 SEH 等垃圾的程序,
    还有一些有效的方法对付。。。    先 买个关子。。。

3. 不管什么,F8 一直走,首先看看各个CALL 的反应,关注一些F8过后,
   寄存器或数据窗口,堆栈中显示有问题
   的CALL,先记录一下,千万不要看 CALL 就进去,累死你Y的

4. 关键的是看看能不能爆破,能! 就直接看爆破点的要求是什么 ,知道了条件
   后,然后反追上面给出条件的地方

5. 这里说说稍微高级一点的爆破 。 譬如一个壳有NAG,但它没有自检验的情况下
(有也好办,把它也干了,全世界清净了)

就譬如今天流出的 Enigma 1.65 ,我加了个壳,发现有 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[i];
                                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 直接启动程序了

              
   
6. 成功高兴一下,DEL。
  有创意的记录一下后,DEL。
  解不开,收起来,过段时间还是DEL。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 229
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
支持一下!!!!!
2009-4-9 13:22
0
雪    币: 4555
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
如果作者把API头部偷掉,将要死掉,当然那还是有办法的

能讲讲这个吗?
2009-4-9 13:32
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
"""如果上面运气好,能跑起来,万能断点看看能不能断,不能就对各有
   可能的 API 下段(OD 插件全选,菜啊,就是不给他们漏掉),这样的
   坏处是如果作者把API头部偷掉,将要死掉,当然那还是有办法的"""""

啊啊啊,
这些API,有哪些啊,
2009-4-9 14:06
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
见上面。。。。。。。。。。。。
2009-4-9 15:36
0
雪    币: 452
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
归纳的好精练呀!学习~
2009-4-9 16:24
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
有些还没有看懂啊啊啊啊啊
2009-4-9 17:39
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
还是先查下壳好, 现在很多软件都是有壳的.

个人感觉! 呵呵..
2009-4-9 18:06
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
后面的破解方法暂时还有些看不明白
2009-4-10 11:45
0
游客
登录 | 注册 方可回帖
返回
//