首页
社区
课程
招聘
[原创](由于没人能给出破解,先公布第一部分算法)欢迎老鸟们,菜鸟们,前来尝试破解~!
发表于: 2009-4-4 12:57 10541

[原创](由于没人能给出破解,先公布第一部分算法)欢迎老鸟们,菜鸟们,前来尝试破解~!

2009-4-4 12:57
10541
第一部分算法公布在:

http://bbs.pediy.com/showthread.php?p=622597#post622597

//----------------------------------------------------------------------------------------------------------------------------------------

心情好自己写了个程序,是注册类的,欢迎大家破解~!
不提倡暴力破解,关键是锻炼大家的破解能力~!
和我一样的菜鸟估计要花上一整子的,如果是老鸟,高人的话,秒破也是完全可能的
希望大家尝试,我的技术并不高,也没有多强悍,比不上区里的高人,难为一下入门级的菜鸟,应该还是可以的吧~!

加密算法来自网络游戏,我手上的算法都是我逆出来的,所以,希望大家不要把算法到处乱贴,只供学习研究使用,请不要有它途~!谢谢大家了!!!

^_^程序加了个壳,对老鸟们已经不算加了,加跟没加一个样子,为了方便菜鸟研究,壳的调试检测已经被我拿掉了.纯粹就是个压缩壳了,部分代码使用了变异,没加VM,方便大家跟踪.如果变异比较厉害的话,那也是没办法的事,那个壳就那样整的,不过,程序中有类似的代码存在,专门留下来给大家探索,也就是说变异部分代码,可以从程序里找到类似的代码.但是不全相同~!

//-----------------------------------------------------------------------------------------------------------------------------
//参考信息:
注册KEY类似:
Name: silly
Key: B19BF359C43118A179E7B607D7C6275209423B44BC6C2DF4775BA6B850F3

理论上以上KEY一个小时后会失效,原本是设定一个KEY的有效期为一分钟,感觉那样很BT,就默认为一小时了.

提示一:
确实用了VMP加壳,但是取掉了调试检测,VM也基本取掉了,就是为了方便大家破解^_^,算法来自两个网络游戏,我逆出这两个算法,一个为2天,一个为5天,我就不说那两个网络游戏了,如果大家对VMP的变形,感觉厌恶的话,过两天我会根据大家的情况放出,未加壳或用UPX,或ASPACK加壳的程序,采用静态编译后,会比较大~!

提示二:
使用了大概2个算法,第一个算法简单,第二个算法麻烦

提示三:
00402131 >  68 9553AB3D     push    3DAB5395
00402136    E8 B60B0000     call    00402CF1
0040213B    9C              pushfd
0040213C    FF3424          push    dword ptr [esp]
0040213F    60              pushad
00402140    8945 00         mov     dword ptr [ebp], eax
00402143    FF3424          push    dword ptr [esp]
00402146    66:892424       mov     word ptr [esp], sp
0040214A    9C              pushfd
0040214B    8D6424 30       lea     esp, dword ptr [esp+30]
0040214F  - E9 0D770600     jmp     00469861
.....

这个函数的实质内容在这个函数中有类似代码,具体在什么地方我就不说了
00401B64 >  55              push    ebp
00401B65    8BEC            mov     ebp, esp
00401B67    6A FF           push    -1
00401B69    68 E0354400     push    004435E0
00401B6E    64:A1 00000000  mov     eax, dword ptr fs:[0]
00401B74    50              push    eax
00401B75    64:8925 0000000>mov     dword ptr fs:[0], esp
00401B7C    B8 D4FD0100     mov     eax, 1FDD4
00401B81    E8 BA0B0100     call    _chkstk
00401B86    53              push    ebx

00403819 >- E9 CE7E0600     jmp     0046B6EC
0040381E    60              pushad
0040381F    886424 08       mov     byte ptr [esp+a], ah
00403823    894424 1C       mov     dword ptr [esp+1C], eax
00403827    E8 C7630600     call    00469BF3
0040382C    3F              aas
0040382D    0FBED2          movsx   edx, dl
00403830    8B45 00         mov     eax, dword ptr [ebp]

...
这个函数的实质内容也在主函数中有几乎一样的代码,仔细跟下运行结果就会发现,这个是我故意加密的^_^
为的是迷糊人的.

提示四:
关键算法一:
00401F2B    52              push    edx
00401F2C    6A 10           push    10
00401F2E    8D45 A4         lea     eax, dword ptr [ebp-5C]
00401F31    50              push    eax
00401F32    E8 C5080000     call    oldXiahDecProc

关键算法二:
00401EBB    8D55 A4         lea     edx, dword ptr [ebp-5C]
00401EBE    52              push    edx
00401EBF    8B45 10         mov     eax, dword ptr [ebp+10]
00401EC2    50              push    eax
00401EC3    8D8D 6002FEFF   lea     ecx, dword ptr [ebp+FFFE0260]
00401EC9    E8 D9060000     call    CPalEncDec::Decrypt

提示五:
会根据大家的情况给出~! 谢谢大家支持...

//-----------------------------------------------------------------------------------------------------------------------------
由于VMP估计大家很难适应,或者说是看着就心烦,这会补加了,降低难度的程序,并修复了BUG,BUG问题在其中一个关键算法中,对返回值没校验,memcpy时,出错~! 以前没注意这个,只是拿来用了
谢谢大家提出的意见~!这次加壳为UPX壳,脱壳方式为upx -d ,我没处理,完全可以用UPX自己脱掉
,加壳难度基本上没有了,这次新放出的,没有变异代码,希望大家加油别泄气~!

//破解成功后图为:


//----------------------------------------------------------------------------------------------------------------------------
回复中我给大家做了个实验,变异代码基本上都可以恢复,只要细心点,别落下几句,基本上就可以搞定的~!脱壳我已经在回复中给出方法,难度再次降低~!现在要做的只是看算法,写注册机~!
没人理,是大家都泄气了吗?不会是真的吧,
大家快出来表演了,我欢迎欢迎~~!
//-----------------------------------------------------------------------------------------------------------------------------

难度挑战程序在这里:
RegisterMe.vmp.rar

难度降低程序在这里:
RegisterMe.rar

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (28)
雪    币: 623
活跃值: (30)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
真可爱
2009-4-4 13:37
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
3
先顶后看~~
2009-4-4 14:06
0
雪    币: 358
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
太不稳定了吧
上传的附件:
2009-4-4 14:34
0
雪    币: 295
活跃值: (366)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
偶偶来晚了……
2009-4-4 14:58
0
雪    币: 295
活跃值: (366)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
楼主真厚道~ 加的VMP 什么都没保护……
2009-4-4 15:26
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
7
那多没诚意
LZ列源码来分享一下

我怎么好像有看到DES
2009-4-4 18:38
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
8
我静静地看sessiondiy大侠表演算了。
2009-4-4 20:40
0
雪    币: 107
活跃值: (2222)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
9
Key位数较少的程序就挂了,BUG?
看高手表演
2009-4-4 21:14
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
10
对于CM...
太难的不玩
人肉的不玩
不会的不玩
2009-4-4 23:53
0
雪    币: 1647
活跃值: (306)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
11
LS加油别泄气,实际不算难的,我加UPX了,不影响了...!
2009-4-5 10:23
0
雪    币: 1647
活跃值: (306)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
12
我自己来破~!
哎~!咱没人破,先放出VMP的脱壳方法~!

//入口
004AC689 >    68 94EA29D7   push    D729EA94
004AC68E      E8 32100000   call    004AD6C5
004AC693      80FC 05       cmp     ah, 5
004AC696      9C            pushfd
004AC697      9C            pushfd
004AC698      60            pushad
004AC699      FF7424 08     push    dword ptr [esp+8]

//查找 pop ebp (怎么来的,最笨的办法就是直接跟就是了,跟了第一次,就知道了,像这样的返回可是VMP的脱壳的转折点.)
00470737   .  5D            pop     ebp
00470738   .  5D            pop     ebp
00470739   .  66:0FCD       bswap   bp
0047073C   .  5D            pop     ebp
0047073D   .  60            pushad
0047073E   .  FF7424 08     push    dword ptr [esp+8]
00470742   .  9C            pushfd
00470743   .  FF7424 28     push    dword ptr [esp+28]
00470747   .  C2 2C00       retn    2C  //F2断点

//查看EDX,当EDX的值在VMP0的时候就要手动跟了,

004ADF4B  /$  57            push    edi
004ADF4C  |.  E8 A30D0000   call    004AECF4
004ADF51  |$  66:894C24 04  mov     word ptr [esp+4], cx
004ADF56  |.  895424 5C     mov     dword ptr [esp+5C], edx
004ADF5A  |.  66:C74424 08 >mov     word ptr [esp+8], 7366
004ADF61  |.  C64424 08 38  mov     byte ptr [esp+8], 38
004ADF66  |.  FF7424 5C     push    dword ptr [esp+5C]
004ADF6A  \.  C2 6000       retn    60 //这里F2了,

//然后是每按一下看看EDX和堆栈,当出现代码段地址的时候,可能就是OEP,一般从堆栈中可以看到
//这里有个简单的办法就是直接找OEP
//直接进代码段,OD分析代码~!

//这里是构造函数,实际运气好的话,直接在构造函数下断点,在WINMAIN调用时会初始化构造函数,也就是说当你按几下返回就到了WINMAIN了
00401000  /.  55            push    ebp
00401001  |.  8BEC          mov     ebp, esp
00401003  |.  51            push    ecx
00401004  |.  894D FC       mov     dword ptr [ebp-4], ecx
00401007  |.  B8 30584400   mov     eax, 00445830
0040100C  |.  8BE5          mov     esp, ebp
0040100E  |.  5D            pop     ebp
0040100F  \.  C3            retn
00401010  /$  55            push    ebp
00401011  |.  8BEC          mov     ebp, esp
00401013  |.  51            push    ecx
00401014  |.  894D FC       mov     dword ptr [ebp-4], ecx
00401017  |.  6A 00         push    0
00401019  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
0040101C  |.  E8 B19C0300   call    0043ACD2
00401021  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
00401024  |.  C700 68584400 mov     dword ptr [eax], 00445868
0040102A  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
0040102D  |.  8BE5          mov     esp, ebp
0040102F  |.  5D            pop     ebp
00401030  \.  C3            retn

//我们往下划直到有跳转到的地址就进去看看,这个叫顺藤摸瓜,实际只要抓住树叶就能到主干一样,慢慢有点耐心,你可以用各种方式来到达OEP,因为每个程序的主初试函数内容都是不一样的.

//当碰到这样的程序是最好找OEP的,因为一看就是DEBUG的编译,MFC的程序,这个我就不解释了,
//根据这个我们可以找这样的:

push dword ptr[ebp + 14]
push dword ptr[ebp + 10]
push dword ptr[ebp + 0C]
push dword ptr[ebp + 8]

//因为我们肯定的是winmain为4个参数,而从入口传递参数的时候必然和上面一样
//第一个查找结果如下,显然不是^^
0040716A  /.  55            push    ebp
0040716B  |.  8BEC          mov     ebp, esp
0040716D  |.  83EC 28       sub     esp, 28
00407170  |.  53            push    ebx
00407171  |.  56            push    esi
00407172  |.  57            push    edi
00407173  |.  E8 22FDFFFF   call    00406E9A
00407178  |.  85C0          test    eax, eax
0040717A  |.  74 17         je      short 00407193
0040717C  |.  FF75 14       push    dword ptr [ebp+14]
0040717F  |.  FF75 10       push    dword ptr [ebp+10]
00407182  |.  FF75 0C       push    dword ptr [ebp+C]
00407185  |.  FF75 08       push    dword ptr [ebp+8]
00407188  |.  FF15 A4C84500 call    dword ptr [45C8A4]
0040718E  |.  E9 C1000000   jmp     00407254

//第2次查找结果:也不是
00407428  /.  55            push    ebp
00407429  |.  8BEC          mov     ebp, esp
0040742B  |.  FF75 20       push    dword ptr [ebp+20]
0040742E  |.  FF75 1C       push    dword ptr [ebp+1C]
00407431  |.  FF75 18       push    dword ptr [ebp+18]
00407434  |.  FF75 14       push    dword ptr [ebp+14]
00407437  |.  FF75 10       push    dword ptr [ebp+10]
0040743A  |.  FF75 0C       push    dword ptr [ebp+C]
0040743D  |.  FF75 08       push    dword ptr [ebp+8]
00407440  |.  FF71 04       push    dword ptr [ecx+4]
00407443  |.  FF15 0C514400 call    dword ptr [44510C]
00407449  |.  5D            pop     ebp
0040744A  \.  C2 1C00       retn    1C

//当我们找到这里的时候,会觉得有点像,但是不是,无法返回到入口,那就不是,因为我们知道入口是没加密的
00414878  /.  55            push    ebp
00414879  |.  8BEC          mov     ebp, esp
0041487B  |.  6A 00         push    0
0041487D  |.  FF75 14       push    dword ptr [ebp+14]
00414880  |.  FF75 10       push    dword ptr [ebp+10]
00414883  |.  FF75 0C       push    dword ptr [ebp+C]
00414886  |.  FF75 08       push    dword ptr [ebp+8]
00414889  |.  E8 64FFFFFF   call    004147F2  //这里CALL进了程序自己,应该是MFC库
0041488E  |.  8B45 10       mov     eax, dword ptr [ebp+10]
00414891  |.  5D            pop     ebp
00414892  \.  C3            retn

//失败~~!,没找到~~!
//尝试入口的第二种形式
push dword ptr[esp+10]
push dword ptr[esp+10]
push dword ptr[esp+10]
push dword ptr[esp+10]

//1
0040740C   .  FF7424 10     push    dword ptr [esp+10]
00407410   .  FF7424 10     push    dword ptr [esp+10]
00407414   .  FF7424 10     push    dword ptr [esp+10]
00407418   .  FF7424 10     push    dword ptr [esp+10]
0040741C   .  FF71 04       push    dword ptr [ecx+4]
0040741F   .  FF15 08514400 call    dword ptr [445108]
00407425   .  C2 1000       retn    10

//2:比较像的就是这个了
00428007  /$  FF7424 10     push    dword ptr [esp+10] //返回像上到入口
0042800B  |.  FF7424 10     push    dword ptr [esp+10]
0042800F  |.  FF7424 10     push    dword ptr [esp+10]
00428013  |.  FF7424 10     push    dword ptr [esp+10]
00428017  |.  E8 16B30000   call    00433332  //判断失败,因为是静态编译,必然会在程序自己,而不是在 MFC库
0042801C  \.  C2 1000       retn    10

//返回到这里,向上看看就是入口
00412E9E  |> \6A 0A         push    0A
00412EA0  |.  58            pop     eax
00412EA1  |>  50            push    eax
00412EA2  |.  FF75 9C       push    dword ptr [ebp-64]
00412EA5  |.  56            push    esi
00412EA6  |.  56            push    esi
00412EA7  |.  FF15 70534400 call    dword ptr [445370]
00412EAD  |.  50            push    eax
00412EAE  |.  E8 54510100   call    00428007

//直接在入口处新建EIP,然后DUMP就好了,再用ImportRec修复,程序就正常了.
//贴子里说没加检测所以,可以用硬件执行断点,直接断在入口处,然后再DUMP.....

//脱壳结束:
//总结为:初步判断上有点失误,忽略了是静态编译,所以在入口判断上有错误,也就是说不会到MFC库~!
2009-4-5 11:23
0
雪    币: 1647
活跃值: (306)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
13
恢复变异代码......

//汇编看来要很熟悉,才能找全了,因为是DEBUG编译.所以,碰到EBP的就直接抓出来,然后连贯起来看看就知道了对不对了

//----------------------------------------------------------------------------------------------------------------------

//抓取代码如下:
                            push    ebp
0046BF31   .  8BEC          mov     ebp, esp
0046BF38   .  83EC 10       sub     esp, 10
0046BF48   .  53            push    ebx
0046BF50   .  894D F0       mov     dword ptr [ebp-10], ecx
0046BF59   .  C745 FC 00000>mov     dword ptr [ebp-4], 0
0046BF65   .  C745 F4 E8266>mov     dword ptr [ebp-C], 476226E8
0046BF72   .  C745 F8 ADF4F>mov     dword ptr [ebp-8], 87F5F4AD
0046BF86   .  8B45 08       mov     eax, dword ptr [ebp+8]
0046BF97   .  0345 FC       add     eax, dword ptr [ebp-4]
0046E10F   .  0FBE08        movsx   ecx, byte ptr [eax]
0046E117   .  85C9          test    ecx, ecx
0046E131   .  8B45 FC       mov     eax, dword ptr [ebp-4]
0046E13A   .  B9 08000000   mov     ecx, 8
0046E0E9   .  F7F1          div     ecx
0046E0EE   .  8B45 08       mov     eax, dword ptr [ebp+8]
0046E0FB   .  0345 FC       add     eax, dword ptr [ebp-4]
0046E0FF   .  0FBE08        movsx   ecx, byte ptr [eax]
0046E106   .  8B45 FC       mov     eax, dword ptr [ebp-4]
0046A343   .  C1E8 03       shr     eax, 3
0046A347   .  8D4C01 25     lea     ecx, dword ptr [ecx+eax+25]
0046A34F   .  8A5C15 F4     mov     bl, byte ptr [ebp+edx-C]
0046A359   .  32D9          xor     bl, cl  ;没看出来,我怎么说那觉得不对呢
0046A35D   .  8B45 FC       mov     eax, dword ptr [ebp-4]
0046A36D   .  29D2          sub     edx, edx ;应该是EDX为0的,没找到xor,到找到SUB
0046A374   .  B9 08000000   mov     ecx, 8
0046A380   .  F7F1          div     ecx
0046A383   .  885C15 F4     mov     byte ptr [ebp+edx-C], bl
0046A38A   .  8B55 FC       mov     edx, dword ptr [ebp-4]
0046A395   .  83C2 01       add     edx, 1
0046A399   .  8955 FC       mov     dword ptr [ebp-4], edx
                            jmp     0046BF86
//JMP到这里:证明是个循环
0046BF79   > \68 19C645A5   push    A545C619
0046BF7E   .  66:0FACF9 02  shrd    cx, di, 2
0046BF83   .  FF3424        push    dword ptr [esp]
0046BF86   .  8B45 08       mov     eax, dword ptr [ebp+8]
0046BF89   .  66:19F9       sbb     cx, di
0046BF8C   .  19D1          sbb     ecx, edx
0046BF8E   .  66:0FADD9     shrd    cx, bx, cl
0046BF92   .  66:0FBAF9 0B  btc     cx, 0B
0046BF97   .  0345 FC       add     eax, dword ptr [ebp-4]
0046BF9A   .  E9 6F210000   jmp     0046E10E

//
0046E117   .  85C9          test    ecx, ecx
0046E119   .  68 8DA69BAD   push    AD9BA68D
0046E11E   .  8D6424 2C     lea     esp, dword ptr [esp+2C]
0046E122   .^ 0F84 9CD3FFFF je      0046B4C4  //没看出来这里有个JE,看来需要仔细点

0046B4C4   > /60            pushad
0046B4C5   . |F7D0          not     eax
0046B4C7   . |60            pushad
0046B4C8   . |E8 70190000   call    0046CE3D

//
0046CE3D   $  8D45 F4       lea     eax, dword ptr [ebp-C]
                            push    eax
0046C312   .  8B4D F0       mov     ecx, dword ptr [ebp-10]
                            call    004038EA
//JMP 到下面
004038EA  |$  55            push    ebp
004038EB  |.  8BEC          mov     ebp, esp
004038ED  |.  51            push    ecx
004038EE  |.  894D FC       mov     dword ptr [ebp-4], ecx
004038F1  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004038F4  |.  50            push    eax
004038F5  |.  6A 00         push    0
004038F7  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]
004038FA  |.  51            push    ecx
004038FB  |.  E8 B2F7FFFF   call    004030B2
00403900  |.  83C4 0C       add     esp, 0C
00403903  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
00403906  |.  81C2 80000000 add     edx, 80
0040390C  |.  52            push    edx
0040390D  |.  6A 01         push    1
0040390F  |.  8B45 08       mov     eax, dword ptr [ebp+8]
00403912  |.  50            push    eax
00403913  |.  E8 9AF7FFFF   call    004030B2
00403918  |.  83C4 0C       add     esp, 0C
0040391B  |.  8BE5          mov     esp, ebp
0040391D  |.  5D            pop     ebp
0040391E  \.  C2 0400       retn    4

//再往下看
0046A422   .  68 93CB0865   push    6508CB93
0046BD54   .  C70424 0D8EA6>mov     dword ptr [esp], 31A68E0D  
;我刚开始一之觉得是VMP没注意,实际等效push 31A68E0D

0046BD6A   .  8B4D F0       mov     ecx, dword ptr [ebp-10]

//CALL 到下面:
004037C5  /$  55            push    ebp
004037C6  |.  8BEC          mov     ebp, esp
004037C8  |.  51            push    ecx
004037C9  |.  894D FC       mov     dword ptr [ebp-4], ecx
004037CC  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
004037CF  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]
004037D2  |.  8988 00010000 mov     dword ptr [eax+100], ecx
004037D8  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
004037DB  |.  8B45 0C       mov     eax, dword ptr [ebp+C]
004037DE  |.  8982 04010000 mov     dword ptr [edx+104], eax
004037E4  |.  8BE5          mov     esp, ebp
004037E6  |.  5D            pop     ebp
004037E7  \.  C2 0800       retn    8

//-----------------------------------------------------------------------------------
//将代码归纳起来:
                            push    ebp
0046BF31   .  8BEC          mov     ebp, esp
0046BF38   .  83EC 10       sub     esp, 10
0046BF48   .  53            push    ebx
0046BF50   .  894D F0       mov     dword ptr [ebp-10], ecx
0046BF59   .  C745 FC 00000>mov     dword ptr [ebp-4], 0
0046BF65   .  C745 F4 E8266>mov     dword ptr [ebp-C], 476226E8
0046BF72   .  C745 F8 ADF4F>mov     dword ptr [ebp-8], 87F5F4AD
0046BF86   .  8B45 08       mov     eax, dword ptr [ebp+8]
0046BF97   .  0345 FC       add     eax, dword ptr [ebp-4]
0046E10F   .  0FBE08        movsx   ecx, byte ptr [eax]
0046E117   .  85C9          test    ecx, ecx
0046E122   .^ 0F84 9CD3FFFF je      0046CE3D  //没看出来这里有个JE,看来需要仔细点
0046E131   .  8B45 FC       mov     eax, dword ptr [ebp-4]
0046E13A   .  B9 08000000   mov     ecx, 8
0046E0E9   .  F7F1          div     ecx
0046E0EE   .  8B45 08       mov     eax, dword ptr [ebp+8]
0046E0FB   .  0345 FC       add     eax, dword ptr [ebp-4]
0046E0FF   .  0FBE08        movsx   ecx, byte ptr [eax]
0046E106   .  8B45 FC       mov     eax, dword ptr [ebp-4]
0046A343   .  C1E8 03       shr     eax, 3
0046A347   .  8D4C01 25     lea     ecx, dword ptr [ecx+eax+25]
0046A34F   .  8A5C15 F4     mov     bl, byte ptr [ebp+edx-C]
0046A359   .  32D9          xor     bl, cl  ;没看出来,我怎么说那觉得不对呢
0046A35D   .  8B45 FC       mov     eax, dword ptr [ebp-4]
0046A36D   .  29D2          sub     edx, edx ;应该是EDX为0的,没找到xor,到找到SUB
0046A374   .  B9 08000000   mov     ecx, 8
0046A380   .  F7F1          div     ecx
0046A383   .  885C15 F4     mov     byte ptr [ebp+edx-C], bl
0046A38A   .  8B55 FC       mov     edx, dword ptr [ebp-4]
0046A395   .  83C2 01       add     edx, 1
0046A399   .  8955 FC       mov     dword ptr [ebp-4], edx
                            jmp     0046BF86
0046CE3D   $  8D45 F4       lea     eax, dword ptr [ebp-C]
                            push    eax
0046C312   .  8B4D F0       mov     ecx, dword ptr [ebp-10]
                            call    004038EA
0046A422   .  68 93CB0865   push    6508CB93
0046BD54   .  C70424 0D8EA6>mov     dword ptr [esp], 31A68E0D  
0046BD6A   .  8B4D F0       mov     ecx, dword ptr [ebp-10]
0046CF03   .  E8 BD68F9FF   call    004037C5
0046CF13   .  5B            pop     ebx
0046D783   > \89EC          mov     esp, ebp
                            pop     ebp
                            retn    4 //这个要根据开始的sub     esp, 10,计算得来~!

//
应该没少的了吧...基本上代码流程很清晰了^_^
剩下的不做了,大家可以按我的方法来尝试 ~~!
2009-4-5 12:08
0
雪    币: 1647
活跃值: (306)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
14
13楼伪代码如下:
因为我手上的代码也是逆出来的,所以只能是伪代码:
函数目的是将字符串转为2个DWORD,做为后面加密解密的KEY使用.
//---------------------------------------------------------------------------------------------------

void A(char *szBuffer)
{
        DWORD        dwNum  = 0x00;
        DWORD        dwbuf[2] = {0x476226E8,0x87F5F4AD};

        for(  ; szbuffer[dwNum] ; )
        {
                *( (LPBYTE)((DWORD)&dwbuf + (dwNum % 0x08)) ) ^= ( szbuffer[ dwNum ] + (dwNum >> 0x03) + 0x25 );
               
                dwNum ++;
        }

        _call004038EA (unsigned char *)&dwbuf );
        _call004037C5( 0x31A68E0D , 0x6508CB93 );
}
2009-4-6 10:57
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
15
静静地学习。。。

这题跟了好几遍,都没有清晰的思路。

感谢楼主的提示。
我习惯自己先看,有了思路后再看提示。

有时间再认真地学习体会。。。
2009-4-6 11:44
0
雪    币: 358
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
一个crackme   又加壳   又加KEY的有效期  没意思
2009-4-6 13:22
0
雪    币: 1647
活跃值: (306)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
17
加油加油,别泄气~!
如果是挑战的VMP,需要把变异代码复原,如果是挑战的UPX,那么就是把两大算法,逆出来,再写出反算法~!这样就可以写出注册机~!
算法中第2个比较复杂~!需要耐心,算法应该不会太旧的,去年才开始公测的.一个可能有点作古,但是相对要简单许多.
2009-4-7 18:47
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
18
感谢楼上看得起。
最近挺忙的,这题满耗时间的。

我今年练习动态调试的目标就是你这种类型的题,
所以我希望用纯OD攻克它。
我收藏了,准备年底做我的动态调试练习的毕业考试题。

现在,我的动态调试的初级阶段基本达到预期的目标。
中级阶段,我将重点在VB-PCODE和一些少见的语言。
高级阶段,重点是带壳调试。

今年形式不利,受其它因素的影响,我放弃了将自己研究成果
著文的打算。而是将练习的经验有步骤、有计划地、毫无保留地
与一个人交流,也算是对看雪的另一种回报形式吧。

下半年开始后的未来五年多,我将全部精力进行我的人生赌博。
用我的智慧、经验、自制力、汗水和对金融理论的个人自学的理解,
与世界上的顶尖智囊团在中国范围内进行无声的较量。对于我,最难的
是五年后有毅力激流勇退,洒脱收手。人性的贪婪是最难克服的。

熙熙攘攘为利忙,
红旗遍插中国地,
众人皆醉我独醒,
激流勇退寂寞人。

莫忘了,
一将功成万骨枯,
人生没有免费餐。
老夫聊发肺腑言。
五年莫忘少年狂。

....
2009-4-8 08:20
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
19
  路是人走出来的,脚步永远会留在这里,汗水和智慧会永远闪亮。
2009-4-8 11:06
0
雪    币: 145
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
大家都在打气,看来是遇到难的了!
2009-4-12 14:29
0
雪    币: 1647
活跃值: (306)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
21
go on ....
别泄气...
2009-5-3 16:18
0
雪    币: 228
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
脱壳的写的还是太粗略了,好几个地方看不懂
1 pop ebp是不是vmp脱壳的转折点?
2 查看edx,当edx值在vmp0的时候,这个怎么判断啊
2009-5-4 13:47
0
雪    币: 1647
活跃值: (306)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
23
恩....可以说是吧~~!
如果LS觉得太麻烦,可以尝试UPX版
2009-5-12 16:01
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
呼叫ccfer吧
2009-5-22 15:24
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
多实践多学习~~~还不会破解啊
2009-5-22 15:55
0
游客
登录 | 注册 方可回帖
返回