首页
社区
课程
招聘
[原创+求助]一个很棒的英语软件的注册算法
发表于: 2007-1-14 12:13 16844

[原创+求助]一个很棒的英语软件的注册算法

2007-1-14 12:13
16844

【文章标题】: 奇迹英语智育记忆 v5.0精华版注册研究
【文章作者】: HolmesConan
【作者邮箱】: holmescn@gmail.com
【作者主页】: http://blog.csdn.net/holmescn
【作者QQ号】: 83323299
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 2.12
【保护方式】: 注册号 MD5 DES
【编写语言】: VB
【使用工具】: OD PEiD ImportREC LoadPE vbexplorer CryptTool
【操作平台】: Windows
【软件介绍】: 一个非常非常好的背单词软件!
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  先用PEiD看了一下,是ASPack 2.12加的壳,有三个EXE文件,分析后知道luoSoft001.exe是主要的文件。脱了再说!
  用OD打开luoSoft001.exe
  
  01524001 >  60              pushad              ;入口
  01524002    E8 03000000     call    0152400A
  01524007  - E9 EB045D45     jmp     46AF44F7
  0152400C    55              push    ebp
  0152400D    C3              retn
  0152400E    E8 01000000     call    01524014
  01524013    EB 5D           jmp     short 01524072
  ……―……………………
  
  向下找到:
  015243AF    61              popad                 ;解完了,F4到这里
  015243B0    75 08           jnz     short 015243BA
  015243B2    B8 01000000     mov     eax, 1
  015243B7    C2 0C00         retn    0C
  015243BA    68 00000000     push    0
  015243BF    C3              retn
  
  然后F8几下,到retn,再F8一下,就到了OEP了:
  
  004033F4   .  68 8C 4B 52 0>ascii   "h?R",0                          ;  You're at OEP
  004033F9      E8            db      E8
  004033FA      F0            db      F0
  004033FB      FFFFFF00      dd      luoSoft0.00FFFFFF
  
  然后打开LoadPE,Dump Full
  然后要修那个Import table了,用ImportREC,把上面找a到的OEP,减了基地址,得到000033F4,添到OEP里,
  然后IAT AutoSearch,再Get Imports。OK,选中Add new section,然后 fix dump。选 中刚才dump出来的
  那个dump.exe。到现在,是已经脱完了。
  为了保险,用PEiD再看一下,OK,Microsoft Visual Basic 5.0 / 6.0,万里长征走出了第一步。先小高兴一下。
  
  因为是VB写的,当然首先想到了SmartCheck,可一加载,发现是p-code的,不能加。算了,还是OD它吧。
  先锁定目标,用vbexplorer看一下,找到N个form,其中form7的caption是“软件注册”,ok,顺着找到Command1,
  caption是“确认注册”看下事件Click地址是14CF1C0,记下来.
  下面要用到算法了,心里比较虚,因为本人不是计算机专业的,所以这些东西都没有什么底子,于是上网找点资料,
  发现了奇迹英语 v3.0的一个注册码算法的研究。做个样板吧。
  英雄所见略同,他也是在这个软件注册的button上下断的。我们也在这里断一下。
  可气的是,把整个过程跟完了,都没有找到在哪儿注册。看来,不是在这里了。
  没办法,样板用不上,自己发明吧。
  因为会有个msgbox的提示,在OD里,Alt+E打开模块,在msvbvm60里找名字,在rtcMsgBox上下断。OK,加载它!
  点注册,添一个32位的注册号,然后确定。我们就来到这里:
  
  6A362F29 >  55              push    ebp
  6A362F2A    8BEC            mov     ebp, esp
  6A362F2C    83EC 4C         sub     esp, 4C
  6A362F2F    8B4D 14         mov     ecx, dword ptr [ebp+14]
  6A362F32    53              push    ebx
  6A362F33    56              push    esi
  6A362F34    57              push    edi
  6A362F35    66:8339 0A      cmp     word ptr [ecx], 0A
  没什么用,是在msvbvm60的领空。Alt+F9,点确定,来到了dump_的领空。
  014D03BE   .  FF15 BC104000 call    dword ptr [<&msvbvm60.rtcMsgBox>>;  msvbvm60.rtcMsgBox
  014D03C4   .  8D95 50FCFFFF lea     edx, dword ptr [ebp-3B0]
  014D03CA   .  8D85 60FCFFFF lea     eax, dword ptr [ebp-3A0]
  014D03D0   .  52            push    edx
  014D03D1   .  8D8D 70FCFFFF lea     ecx, dword ptr [ebp-390]
  014D03D7   .  50            push    eax
  
  向上看,有点远,找到这里:
  014CFB20   > \55            push    ebp                              ;  可能是这个函数注册的喔!
  014CFB21   .  8BEC          mov     ebp, esp
  014CFB23   .  83EC 0C       sub     esp, 0C
  014CFB26   .  68 B62F4000   push    <jmp.&msvbvm60.__vbaExceptHandle>;  SE 处理程序安装
  014CFB2B   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
  014CFB31   .  50            push    eax
  014CFB32   .  64:8925 00000>mov     dword ptr fs:[0], esp
  014CFB39   .  81EC 44050000 sub     esp, 544
  014CFB3F   .  53            push    ebx
  
  呵呵,有点太向前了,为了保险嘛!下面用F4+F8到这里:
  
  014CFDD9   > \8B85 D4FCFFFF mov     eax, dword ptr [ebp-32C]         ;  终于看到我输入的注册号了
  014CFDDF   .  8D8D 90FCFFFF lea     ecx, dword ptr [ebp-370]
  014CFDE5   .  8985 A8FCFFFF mov     dword ptr [ebp-358], eax         
  014CFDEB   .  8D85 A0FCFFFF lea     eax, dword ptr [ebp-360]
  014CFDF1   .  BB 08000000   mov     ebx, 8
  014CFDF6   .  50            push    eax
  014CFDF7   .  51            push    ecx
  014CFDF8   .  89B5 D4FCFFFF mov     dword ptr [ebp-32C], esi
  014CFDFE   .  899D A0FCFFFF mov     dword ptr [ebp-360], ebx
  014CFE04   .  FF15 E4104000 call    dword ptr [<&msvbvm60.rtcTrimVar>;  msvbvm60.rtcTrimVar
  
  再下:
  
  014CFF1F   .  899D DCFBFFFF mov     dword ptr [ebp-424], ebx         ;  开始一个循环
  014CFF25   .  FF15 A8104000 call    dword ptr [<&msvbvm60.__vbaVarFo>;  msvbvm60.__vbaVarForInit
  014CFF2B   .  8B35 00114000 mov     esi, dword ptr [<&msvbvm60.rtcMi>;  msvbvm60.rtcMidCharVar
  014CFF31   .  8B1D 48124000 mov     ebx, dword ptr [<&msvbvm60.__vba>;  msvbvm60.__vbaI4Var
  014CFF37   >  85C0          test    eax, eax
  014CFF39   .  0F84 F9010000 je      014D0138                         ;  下面是循环体
  
  好了,这里的循环在网上那个文章里见到了,窃喜!这里对注册号进行一个分离,不过,最终的结果是:
  输入注册号的2,4,6,8,10,12,14,16位生成一个Key.
  比如我输入的号是:13579135791357910246802468024680
  得到:37159371
  同时还产生另外三个号:
  15937159   输入注册号的1,3,5,7,9,11,13,15位生成
  26048260   输入注册号的后16位中的2,4,6,8,10,12,14,16位生成
  04826048   输入注册号的后16位中的1,3,5,7,9,11,13,15位生成
  不过这三个不知道有什么用。
  在循环结束点设置断点:
  
  014D012D   .  FF15 C4124000 call    dword ptr [<&msvbvm60.__vbaVarFo>;  msvbvm60.__vbaVarForNext
  014D0133   .^ E9 FFFDFFFF   jmp     014CFF37
  014D0138   >  8D95 CCFDFFFF lea     edx, dword ptr [ebp-234]         ;  循环结束,断点
  014D013E   .  6A 08         push    8
  014D0140   .  8D85 A0FCFFFF lea     eax, dword ptr [ebp-360]
  014D0146   .  52            push    edx
  
  重新载入,再输入注册号,断在上面的点。再向下跟,到
  
  014D01D1   .  8D8D 70FEFFFF lea     ecx, dword ptr [ebp-190]         ;  UNICODE:"37159371"
  014D01D7   .  52            push    edx
  014D01D8   .  51            push    ecx
  014D01D9   .  56            push    esi
  014D01DA   .  FF90 34090000 call    dword ptr [eax+934]              ;  dumped_.005364FB
  
  在栈中看到了注册号,又窃喜,再这个call很可疑,先不管他,记下来,再向下跟。
  
  014D022A   > \8B35 10005101 mov     esi, dword ptr [1510010]
  014D0230   .  8D85 90FCFFFF lea     eax, dword ptr [ebp-370]
  014D0236   .  50            push    eax
  014D0237   .  8D8D A0FCFFFF lea     ecx, dword ptr [ebp-360]
  014D023D   .  8D45 CC       lea     eax, dword ptr [ebp-34]
  014D0240   .  C785 A8FCFFFF>mov     dword ptr [ebp-358], 20
  014D024A   .  C785 A0FCFFFF>mov     dword ptr [ebp-360], 2
  014D0254   .  8B16          mov     edx, dword ptr [esi]
  014D0256   .  51            push    ecx
  014D0257   .  50            push    eax
  014D0258   .  56            push    esi
  
  
  014D0259   .  FF92 80090000 call    dword ptr [edx+980]              ;  MD5上面的注册号
  014D025F   .  85C0          test    eax, eax
  014D0261   .  DBE2          fclex
  014D0263   .  7D 0E         jge     short 014D0273
  014D0265   .  68 80090000   push    980
  014D026A   .  68 90735300   push    00537390
  014D026F   .  56            push    esi
  014D0270   .  50            push    eax
  014D0271   .  FFD7          call    edi
  014D0273   >  8D95 90FCFFFF lea     edx, dword ptr [ebp-370]
  014D0279   .  8D4D CC       lea     ecx, dword ptr [ebp-34]
  014D027C   .  FF15 14104000 call    dword ptr [<&msvbvm60.__vbaVarMo>;  msvbvm60.__vbaVarMove
  014D0282   .  8D8D A0FCFFFF lea     ecx, dword ptr [ebp-360]
  014D0288   .  FFD3          call    ebx
  014D028A   .  8D4D CC       lea     ecx, dword ptr [ebp-34]
  014D028D   .  8D95 FCFBFFFF lea     edx, dword ptr [ebp-404]
  014D0293   .  51            push    ecx
  014D0294   .  52            push    edx
  014D0295   .  C785 04FCFFFF>mov     dword ptr [ebp-3FC], 0053EEB0    ;  015ee6f8b29aa387feb4d75f9c5e032b
  014D029F   .  C785 FCFBFFFF>mov     dword ptr [ebp-404], 8008
  014D02A9   .  FF15 40124000 call    dword ptr [<&msvbvm60.__vbaVarTs>;  msvbvm60.__vbaVarTstNe
  014D02AF   .  66:85C0       test    ax, ax
  014D02B2   .  0F84 47010000 je      014D03FF                         ;  如果不正确,就不跳,那就死掉了!
  
  不跳的话,到要msgbox了,好了,找到关键部分了。可MD5里传入的,并不是我的注册号,而是另一个数
  在注册号输入 13579135791357910246802468024680
  得到:0F17EC90DCB27C03
  在CryptTool里,用MD5计算,得到1e4400cce116615bc831858312bd8271
  再用这个和015ee6f8b29aa387feb4d75f9c5e032b比较
  回到上而那个可疑的函数014D01DA重新载入,跟进去。
  传入参数为:37159371(我输的注册号)  Jrji48HJFwer428KdEJ9(应该是机器码吧)
  前面是对方便的md5校验,也不清楚是校验谁,没有细看,一直跟到这里:
  
  014BF491   > \8B55 10       mov     edx, dword ptr [ebp+10]          ;  以上处理和文件相关,下面才是正点
  014BF494   .  8B1D 1C104000 mov     ebx, dword ptr [<&msvbvm60.__vba>;  msvbvm60.__vbaVarVargNofree
  014BF49A   .  8D8D 54FFFFFF lea     ecx, dword ptr [ebp-AC]
  014BF4A0   .  FFD3          call    ebx                              ;  <&msvbvm60.__vbaVarVargNofree>
  014BF4A2   .  50            push    eax
  014BF4A3   .  8D45 C0       lea     eax, dword ptr [ebp-40]
  014BF4A6   .  50            push    eax
  014BF4A7   .  FFD7          call    edi
  014BF4A9   .  8D4D BC       lea     ecx, dword ptr [ebp-44]
  014BF4AC   .  50            push    eax
  014BF4AD   .  51            push    ecx
  014BF4AE   .  FFD6          call    esi
  014BF4B0   .  8B55 0C       mov     edx, dword ptr [ebp+C]           ;  在这里看到了我输入的注册号
  014BF4B3   .  50            push    eax                              ;  机器码入栈
  014BF4B4   .  8D8D 64FFFFFF lea     ecx, dword ptr [ebp-9C]
  014BF4BA   .  FFD3          call    ebx
  014BF4BC   .  8D55 C8       lea     edx, dword ptr [ebp-38]
  014BF4BF   .  50            push    eax
  014BF4C0   .  52            push    edx
  014BF4C1   .  FFD7          call    edi
  014BF4C3   .  50            push    eax                              ;  我的注册号
  014BF4C4   .  8D45 C4       lea     eax, dword ptr [ebp-3C]
  014BF4C7   .  50            push    eax
  014BF4C8   .  FFD6          call    esi
  014BF4CA   .  50            push    eax                              ;  注册号,ASCII
  014BF4CB   .  E8 908807FF   call    00537D60                         ;  得出MD5中间值
  
  最后一个call就得到上面的那个MD5之前的数。OK,跟进去:
  来到了LuoX30ND的领空了,看了一下,是一个加密库,jesion.dll,可没有google到,不知道是哪个库。对照
  Export table,知道是用的DesEn函数,就是DES编码了。兴奋中,用CryptTool的DES,对注册号和机器码进行转换
  可得不到程序里那个结果。郁闷死了!
  
  我能做的就这么多了,希望有个高手指点一下!受教了。第一次写,没有什么经验,大家凑合看吧!
  
--------------------------------------------------------------------------------
【经验总结】
  今天是破解这个软件的第三天了。基本是边学边破,虽然以以前也有点经验, 不过,好长时间不到手了,什么也不会了。
  看来要常练习才是啊!
  和v3.0版不同,这个版本已经把MD5放到程序里自己实现了,只是这个DES,还用的库,虽然库里也有MD5,不知道它为什么
  不用。
  破解真是个废眼的活,大家要注册保护眼睛了,哈哈!
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年01月13日 14:48:49


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (61)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
visual basic 程序的文章,跟踪难,学习楼主!
2007-1-14 12:31
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
高手指点一下啊!谢谢!!
2007-1-14 17:41
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
在软件中的DESEn的结果和用CryptoCalc算的结果不一样,怎么回事,郁闷!
2007-1-15 06:27
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持你。我也是破解这个软件。的确很难跟踪,郁闷!
2007-1-15 17:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
6A362F29 >  55              push    ebp
  6A362F2A    8BEC            mov     ebp, esp
  6A362F2C    83EC 4C         sub     esp, 4C
  6A362F2F    8B4D 14         mov     ecx, dword ptr [ebp+14]
  6A362F32    53              push    ebx
  6A362F33    56              push    esi
  6A362F34    57              push    edi
  6A362F35    66:8339 0A      cmp     word ptr [ecx], 0A
  没什么用,是在msvbvm60的领空。Alt+F9,点确定,来到了dump_的领空。
  014D03BE   .  FF15 BC104000 call    dword ptr [<&msvbvm60.rtcMsgBox>>;  msvbvm60.rtcMsgBox
  014D03C4   .  8D95 50FCFFFF lea     edx, dword ptr [ebp-3B0]
  014D03CA   .  8D85 60FCFFFF lea     eax, dword ptr [ebp-3A0]
  014D03D0   .  52            push    edx
  014D03D1   .  8D8D 70FCFFFF lea     ecx, dword ptr [ebp-390]
  014D03D7   .  50            push    eax
没什么用,是在msvbvm60的领空。Alt+F9,点确定,来到了dump_的领空。(在这里按ATL+F9 会执行下一步呀!而没有跳到DUMP_的领空呀!???????????)
2007-1-16 16:08
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
希望高手出面破解
2007-1-17 12:15
0
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
8
Jrji48HJFwer428KdEJ9 是用于desde解码的KEY。不是机器码。
里面的主要提示内容及SELECT语句是加密了的,用这个将密文解码成明文。

我做了个绿色的完整功能版,但没地方上传,如果能上传的话,大家可以研究一下了。(不过,仅供研究分析用,如果需用正式版,请向原作者购买注册码)
2007-1-17 13:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
干这个活确实累,眼睛都绿了!楼主加油
2007-1-17 18:09
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 跳跳狗 发布
Jrji48HJFwer428KdEJ9 是用于desde解码的KEY。不是机器码。
里面的主要提示内容及SELECT语句是加密了的,用这个将密文解码成明文。

我做了个绿色的完整功能版,但没地方上传,如果能上传的话,大家可以研究一下了。(不过,仅供研究分析用,如果需用正式版,请向原作者购买注册码)

你可以发到www.chinadforce.com,或者是www.gbaopan.com上去。
2007-1-18 15:23
0
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
11
发到http://tigerdog.cech.com.cn/了。

这个程序需要KEY文件,将用户码发给我,我提供KEY文件,供大家测试这个程序。http://mywb.ys168.com
2007-1-18 16:46
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我现在这台机器的是:3547698801584785GA

谢谢!
2007-1-18 16:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
厉害的人 佩服
2007-1-19 23:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
发上去以后又发现了一些问题。那个串确实不是机器码。向各位看官道歉了。小弟初次发破文,大家见笑了。

这两天考试,比较紧张。没有及时做下去。大家一起研究。
很感谢有这么多人顶!

跳跳狗兄,把你的成果发上来,分享一下啊!
2007-1-20 13:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
to 6楼的兄弟:
Alt+F9之后,会出现注册失败的对话框。点了确定以后,就回到了dump_的凌空了。至少在我这里是。费事一点的方法,你可以一直F8回去,呵呵。
2007-1-20 13:55
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
有没有可能写个注册机啊???
2007-1-21 12:27
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
正在研究中,应该能做,希望大家能合作啊!!!
2007-1-21 17:23
0
雪    币: 34
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
眼睛累啊…………

高手才做这个啊
2007-1-21 17:28
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
我跟了一下,发现软件在点击“注册”后,调用了LuoX30NDl.dll的函数得到了bios ID和硬盘ID。但是不知道对这些id做了什么操作。

还有就是不知道软件有没有象以前的文章所说的,去数据库里查询。
2007-1-21 19:27
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
做了一点小试验
点“软件注册”后
DesDe("C2567E70BC78013D","88372239")
DesDe("66AF87788D21A01C","88372239")
DesDe("C2567E70BC78013D","88372239")
DesDe("66AF87788D21A01C","88372239")
以上产生了注册机器码,打开了注册窗口
输入一个注册号,如:13579135791357910246802468024680
点确认注册后:
DesEn("jkweflskj3439asdkmfe39asdk3","Jrji48HJFwer428KdEJ9")
做一次md5
DesEn("37159371","Jrji48HJFwer428KdEJ9")
做一次md5
DesDe("704CC669E51B1C6BC4B0D47887855A00D8B38190B1A362AA0C2DCBA384ECF7021EF361B62DF16FEAED6F7C073B87D46FA3D27D8422F25BC6","Jrji48HJFwer428KdEJ9")
之后就是注册失败了
2007-1-21 20:23
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
014BCF56   .  FF15 A8104000 call    dword ptr [<&msvbvm60.__vbaVarFo>;  msvbvm60.__vbaVarForInit
014BCF5C   .  8B3D 00114000 mov     edi, dword ptr [<&msvbvm60.rtcMi>;  msvbvm60.rtcMidCharVar
014BCF62   .  8B1D 48124000 mov     ebx, dword ptr [<&msvbvm60.__vba>;  msvbvm60.__vbaI4Var
014BCF68   >  85C0          test    eax, eax
014BCF6A   .  0F84 DD000000 je      014BD04D
014BCF70   .  8D85 58FFFFFF lea     eax, dword ptr [ebp-A8]
014BCF76   .  8D4D DC       lea     ecx, dword ptr [ebp-24]
014BCF79   .  50            push    eax
014BCF7A   .  51            push    ecx
014BCF7B   .  C785 60FFFFFF>mov     dword ptr [ebp-A0], 1
014BCF85   .  C785 58FFFFFF>mov     dword ptr [ebp-A8], 2
014BCF8F   .  FFD3          call    ebx
014BCF91   .  50            push    eax
014BCF92   .  8D55 BC       lea     edx, dword ptr [ebp-44]
014BCF95   .  8D85 48FFFFFF lea     eax, dword ptr [ebp-B8]
014BCF9B   .  52            push    edx
014BCF9C   .  50            push    eax
014BCF9D   .  FFD7          call    edi
014BCF9F   .  8D8D 28FFFFFF lea     ecx, dword ptr [ebp-D8]
014BCFA5   .  8D55 DC       lea     edx, dword ptr [ebp-24]
014BCFA8   .  51            push    ecx
014BCFA9   .  52            push    edx
014BCFAA   .  C785 30FFFFFF>mov     dword ptr [ebp-D0], 1
014BCFB4   .  C785 28FFFFFF>mov     dword ptr [ebp-D8], 2
014BCFBE   .  FFD3          call    ebx
014BCFC0   .  50            push    eax
014BCFC1   .  8D45 AC       lea     eax, dword ptr [ebp-54]
014BCFC4   .  8D8D 18FFFFFF lea     ecx, dword ptr [ebp-E8]
014BCFCA   .  50            push    eax
014BCFCB   .  51            push    ecx
014BCFCC   .  FFD7          call    edi
014BCFCE   .  8D55 9C       lea     edx, dword ptr [ebp-64]
014BCFD1   .  8D85 48FFFFFF lea     eax, dword ptr [ebp-B8]
014BCFD7   .  52            push    edx
014BCFD8   .  8D8D 38FFFFFF lea     ecx, dword ptr [ebp-C8]
014BCFDE   .  50            push    eax
014BCFDF   .  51            push    ecx
014BCFE0   .  FF15 54124000 call    dword ptr [<&msvbvm60.__vbaVarAd>;  msvbvm60.__vbaVarAdd
014BCFE6   .  50            push    eax
014BCFE7   .  8D95 18FFFFFF lea     edx, dword ptr [ebp-E8]
014BCFED   .  8D85 08FFFFFF lea     eax, dword ptr [ebp-F8]
014BCFF3   .  52            push    edx
014BCFF4   .  50            push    eax
014BCFF5   .  FF15 54124000 call    dword ptr [<&msvbvm60.__vbaVarAd>;  msvbvm60.__vbaVarAdd
014BCFFB   .  8BD0          mov     edx, eax
014BCFFD   .  8D4D 9C       lea     ecx, dword ptr [ebp-64]
014BD000   .  FFD6          call    esi
014BD002   .  8D8D 18FFFFFF lea     ecx, dword ptr [ebp-E8]
014BD008   .  8D95 38FFFFFF lea     edx, dword ptr [ebp-C8]
014BD00E   .  51            push    ecx
014BD00F   .  8D85 28FFFFFF lea     eax, dword ptr [ebp-D8]
014BD015   .  52            push    edx
014BD016   .  8D8D 48FFFFFF lea     ecx, dword ptr [ebp-B8]
014BD01C   .  50            push    eax
014BD01D   .  8D95 58FFFFFF lea     edx, dword ptr [ebp-A8]
014BD023   .  51            push    ecx
014BD024   .  52            push    edx
014BD025   .  6A 05         push    5
014BD027   .  FF15 38104000 call    dword ptr [<&msvbvm60.__vbaFreeV>;  msvbvm60.__vbaFreeVarList
014BD02D   .  83C4 18       add     esp, 18
014BD030   .  8D85 B8FEFFFF lea     eax, dword ptr [ebp-148]
014BD036   .  8D8D C8FEFFFF lea     ecx, dword ptr [ebp-138]
014BD03C   .  8D55 DC       lea     edx, dword ptr [ebp-24]
014BD03F   .  50            push    eax
014BD040   .  51            push    ecx
014BD041   .  52            push    edx
014BD042   .  FF15 C4124000 call    dword ptr [<&msvbvm60.__vbaVarFo>;  msvbvm60.__vbaVarForNext
014BD048   .^ E9 1BFFFFFF   jmp     014BCF68

014BD0A6   .  FF15 A8104000 call    dword ptr [<&msvbvm60.__vbaVarFo>;  msvbvm60.__vbaVarForInit
014BD0AC   >  85C0          test    eax, eax
014BD0AE   .  0F84 D0010000 je      014BD284
014BD0B4   .  8D85 58FFFFFF lea     eax, dword ptr [ebp-A8]
014BD0BA   .  8D4D CC       lea     ecx, dword ptr [ebp-34]
014BD0BD   .  50            push    eax
014BD0BE   .  51            push    ecx
014BD0BF   .  C785 60FFFFFF>mov     dword ptr [ebp-A0], 1
014BD0C9   .  C785 58FFFFFF>mov     dword ptr [ebp-A8], 2
014BD0D3   .  FFD3          call    ebx
014BD0D5   .  50            push    eax
014BD0D6   .  8D55 9C       lea     edx, dword ptr [ebp-64]          ;  上一个循环的结果
014BD0D9   .  8D85 48FFFFFF lea     eax, dword ptr [ebp-B8]
014BD0DF   .  52            push    edx
014BD0E0   .  50            push    eax
014BD0E1   .  FFD7          call    edi
014BD0E3   .  8D95 48FFFFFF lea     edx, dword ptr [ebp-B8]
014BD0E9   .  8D8D 6CFFFFFF lea     ecx, dword ptr [ebp-94]
014BD0EF   .  FFD6          call    esi
014BD0F1   .  8D8D 58FFFFFF lea     ecx, dword ptr [ebp-A8]
014BD0F7   .  FF15 24104000 call    dword ptr [<&msvbvm60.__vbaFreeV>;  msvbvm60.__vbaFreeVar
014BD0FD   .  8D8D 58FFFFFF lea     ecx, dword ptr [ebp-A8]
014BD103   .  8D55 CC       lea     edx, dword ptr [ebp-34]
014BD106   .  51            push    ecx
014BD107   .  52            push    edx
014BD108   .  C785 60FFFFFF>mov     dword ptr [ebp-A0], 1
014BD112   .  C785 58FFFFFF>mov     dword ptr [ebp-A8], 2
014BD11C   .  FFD3          call    ebx
014BD11E   .  50            push    eax
014BD11F   .  8D45 9C       lea     eax, dword ptr [ebp-64]
014BD122   .  8D8D 48FFFFFF lea     ecx, dword ptr [ebp-B8]
014BD128   .  50            push    eax
014BD129   .  51            push    ecx
014BD12A   .  FFD7          call    edi
014BD12C   .  8D95 48FFFFFF lea     edx, dword ptr [ebp-B8]
014BD132   .  8D85 68FFFFFF lea     eax, dword ptr [ebp-98]
014BD138   .  52            push    edx
014BD139   .  50            push    eax
014BD13A   .  FF15 C8114000 call    dword ptr [<&msvbvm60.__vbaStrVa>;  msvbvm60.__vbaStrVarVal
014BD140   .  50            push    eax                              ;  获得一位的ascii码值
014BD141   .  FF15 50104000 call    dword ptr [<&msvbvm60.rtcAnsiVal>;  msvbvm60.rtcAnsiValueBstr
014BD147   .  8D95 E8FEFFFF lea     edx, dword ptr [ebp-118]
014BD14D   .  8D4D 8C       lea     ecx, dword ptr [ebp-74]
014BD150   .  66:8985 F0FEF>mov     word ptr [ebp-110], ax
014BD157   .  C785 E8FEFFFF>mov     dword ptr [ebp-118], 2
014BD161   .  FFD6          call    esi
014BD163   .  8D8D 68FFFFFF lea     ecx, dword ptr [ebp-98]
014BD169   .  FF15 D0124000 call    dword ptr [<&msvbvm60.__vbaFreeS>;  msvbvm60.__vbaFreeStr
014BD16F   .  8D8D 48FFFFFF lea     ecx, dword ptr [ebp-B8]
014BD175   .  8D95 58FFFFFF lea     edx, dword ptr [ebp-A8]
014BD17B   .  51            push    ecx
014BD17C   .  52            push    edx
014BD17D   .  6A 02         push    2
014BD17F   .  FF15 38104000 call    dword ptr [<&msvbvm60.__vbaFreeV>;  msvbvm60.__vbaFreeVarList
014BD185   .  B8 02800000   mov     eax, 8002
014BD18A   .  83C4 0C       add     esp, 0C
014BD18D   .  8985 F8FEFFFF mov     dword ptr [ebp-108], eax
014BD193   .  8985 E8FEFFFF mov     dword ptr [ebp-118], eax
014BD199   .  8D45 8C       lea     eax, dword ptr [ebp-74]
014BD19C   .  8D8D F8FEFFFF lea     ecx, dword ptr [ebp-108]
014BD1A2   .  50            push    eax
014BD1A3   .  8D95 58FFFFFF lea     edx, dword ptr [ebp-A8]
014BD1A9   .  51            push    ecx
014BD1AA   .  52            push    edx
014BD1AB   .  C785 00FFFFFF>mov     dword ptr [ebp-100], 30          ;  判断是否是数学
014BD1B5   .  C785 F0FEFFFF>mov     dword ptr [ebp-110], 39
014BD1BF   .  FF15 20124000 call    dword ptr [<&msvbvm60.__vbaVarCm>;  msvbvm60.__vbaVarCmpLt
014BD1C5   .  50            push    eax
014BD1C6   .  8D45 8C       lea     eax, dword ptr [ebp-74]
014BD1C9   .  8D8D E8FEFFFF lea     ecx, dword ptr [ebp-118]
014BD1CF   .  50            push    eax
014BD1D0   .  8D95 48FFFFFF lea     edx, dword ptr [ebp-B8]
014BD1D6   .  51            push    ecx
014BD1D7   .  52            push    edx
014BD1D8   .  FF15 08114000 call    dword ptr [<&msvbvm60.__vbaVarCm>;  msvbvm60.__vbaVarCmpGt
014BD1DE   .  50            push    eax
014BD1DF   .  8D85 38FFFFFF lea     eax, dword ptr [ebp-C8]
014BD1E5   .  50            push    eax
014BD1E6   .  FF15 44114000 call    dword ptr [<&msvbvm60.__vbaVarOr>;  msvbvm60.__vbaVarOr
014BD1EC   .  50            push    eax
014BD1ED   .  FF15 EC104000 call    dword ptr [<&msvbvm60.__vbaBoolV>;  msvbvm60.__vbaBoolVarNull
014BD1F3   .  66:85C0       test    ax, ax
014BD1F6   .  74 4A         je      short 014BD242                   ;  是数学,就在这里跳
014BD1F8   .  8D4D 8C       lea     ecx, dword ptr [ebp-74]
014BD1FB   .  51            push    ecx
014BD1FC   .  FF15 54104000 call    dword ptr [<&msvbvm60.__vbaStrEr>;  msvbvm60.__vbaStrErrVarCopy
014BD202   .  8985 60FFFFFF mov     dword ptr [ebp-A0], eax          ;  做一个转换
014BD208   .  8D95 58FFFFFF lea     edx, dword ptr [ebp-A8]
014BD20E   .  6A 01         push    1
014BD210   .  8D85 48FFFFFF lea     eax, dword ptr [ebp-B8]
014BD216   .  52            push    edx
014BD217   .  50            push    eax
014BD218   .  C785 58FFFFFF>mov     dword ptr [ebp-A8], 8
014BD222   .  FF15 94124000 call    dword ptr [<&msvbvm60.rtcRightCh>;  msvbvm60.rtcRightCharVar
014BD228   .  8D95 48FFFFFF lea     edx, dword ptr [ebp-B8]
014BD22E   .  8D8D 6CFFFFFF lea     ecx, dword ptr [ebp-94]
014BD234   .  FFD6          call    esi
014BD236   .  8D8D 58FFFFFF lea     ecx, dword ptr [ebp-A8]
014BD23C   .  FF15 24104000 call    dword ptr [<&msvbvm60.__vbaFreeV>;  msvbvm60.__vbaFreeVar
014BD242   >  8D8D 7CFFFFFF lea     ecx, dword ptr [ebp-84]
014BD248   .  8D95 6CFFFFFF lea     edx, dword ptr [ebp-94]
014BD24E   .  51            push    ecx
014BD24F   .  8D85 58FFFFFF lea     eax, dword ptr [ebp-A8]
014BD255   .  52            push    edx
014BD256   .  50            push    eax
014BD257   .  FF15 54124000 call    dword ptr [<&msvbvm60.__vbaVarAd>;  msvbvm60.__vbaVarAdd
014BD25D   .  8BD0          mov     edx, eax
014BD25F   .  8D8D 7CFFFFFF lea     ecx, dword ptr [ebp-84]
014BD265   .  FFD6          call    esi
014BD267   .  8D8D 98FEFFFF lea     ecx, dword ptr [ebp-168]
014BD26D   .  8D95 A8FEFFFF lea     edx, dword ptr [ebp-158]
014BD273   .  51            push    ecx
014BD274   .  8D45 CC       lea     eax, dword ptr [ebp-34]
014BD277   .  52            push    edx
014BD278   .  50            push    eax
014BD279   .  FF15 C4124000 call    dword ptr [<&msvbvm60.__vbaVarFo>;  msvbvm60.__vbaVarForNext
014BD27F   .^ E9 28FEFFFF   jmp     014BD0AC
014BD284   >  8B4D 08       mov     ecx, dword ptr [ebp+8]

我的硬盘ID是:5JT4X14R
我的bios ID是:11/03/2004-i865PE-6A79ZG0SC-00
中间值:5AJ7T94ZXG1SCR
我的机器码:5547494081134725

这是两个生成机器码的循环。第一个循环生成中间值,比较容易看明白。可第二个就不是很明白了。第二个循环是把中间值生成机器码。有个转换,找不到,不明白是什么意思.__vbaStrErrVarCopy。高手给看一下!

感想:汇编这东西,看多了就想吐!
2007-1-23 10:58
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
刚刚搞明白了机器码的生成,不知道对不对。
我的硬盘ID是:5JT4X14R
我的bios ID是:11/03/2004-i865PE-6A79ZG0SC-00
中间值:5AJ7T94ZXG1S4CR-
机器码:5547494081134725

中间值是硬盘ID和bios id中的一部分,交替生成的。
   5JT4X14R
   A79ZGSC-
-------------
5AJ7T94ZXG1S4CR-
不知道那个零是什么时候没的。没有仔细看代码,呵呵!
然后是中间值生成机器码。数学部分保留,字母就成ASCII码,然后成就十进行的数对应的字符串,取右边的一位。
字母   十六进行    十进行
A         41         65
J         4A         74
T         54         84
Z         5A         90
X         58         88         
G         47         71
S         53         83
C         43         67
R         52         82
-         2D         45
-------------------------
5547494081134725

到此,机器码的生成分析已经完成
2007-1-23 11:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
好东东大家分享.谢了
2007-1-23 13:15
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
希望大家支持一下!都来做一做,一个人做真的好闷啊!
2007-1-23 16:32
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
因为算法计算器算出的结果总是对不上,那个Crypto++也不会用,文档太少了,搞不明白。所以我想了个着。LuoX30NDl.dll里有各种算法的库函数。于是想到就用它了。用waspack把它脱掉,dll2lib做出lib来,根据调试的过程分析出三个函数的原型:
char* DesEn(char*,char*)
char* DesDe(char*,char*)
char* MD5En(char*)
奇迹是在自己的程序里写了一个MD5的算法,我就用库里的了。
脱完了,用PEiD看了一下,Borland Delphi DLL,看来要用stdcall了。可生成的lib是cdecl的,连接之后把找不到的名字又粘回到dll2lib中,重新导出。一切就OK了。

最后,所用的代码如下:
//DLL2Lib生成的文件
//        crypto_supp.h : supplement header file for crypto.dll
//        Author: DLL to Lib version 1.4
//        Date: Tuesday, January 23, 2007
//        Description: The declaration of the crypto.dll's entry-point function.
//        Prototype: BOOL WINAPI xxx_DllMain(HINSTANCE hinstance, DWORD fdwReason, LPVOID lpvReserved);
//        Parameters:
//                hinstance
//                  Handle to current instance of the application. Use AfxGetInstanceHandle()
//                  to get the instance handle if your project has MFC support.
//                fdwReason
//                  Specifies a flag indicating why the entry-point function is being called.
//                lpvReserved
//                  Specifies further aspects of DLL initialization and cleanup. Should always
//                  be set to NULL;
//        Comment: Please see the help document for detail information about the entry-point
//                 function
//        Homepage: http://www.binary-soft.com
//        Technical Support: support@binary-soft.com
/////////////////////////////////////////////////////////////////////

#if !defined(D2L_CRYPTO_SUPP_H)
#define D2L_CRYPTO_SUPP_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifdef __cplusplus
extern "C" {
#endif

#include <windows.h>

/* This is crypto.dll's entry-point function. You should call it to do necessary
initialization and finalization. */

BOOL WINAPI CRYPTO_DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);

#ifdef __cplusplus
}
#endif

#endif // !defined(D2L_CRYPTO_SUPP_H)
/////////////////////////////////////////////////

/********************************************************************
*
* 文件名称:DLL.h
* 摘 要:Dll2Lib导出库的函数原型
*
* 当前版本:v0.1
* 作 者:福柯
* 完成日期:2007年01月23日
*
* Copyright (c) 2007,Programming Lab.
* All rights reserved.
*********************************************************************/

#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifdef __cplusplus
extern "C" {
#endif

        DLL_API char* PASCAL DesEn(char* data,char* key);
        DLL_API char* PASCAL DesDe(char* data,char* key);
        DLL_API char* PASCAL MD5En(char* data);

#ifdef __cplusplus
}
#endif
////////////////////////////////////////////////////////

/********************************************************************
*
* 文件名称:main.cpp
* 摘 要:实验用dll2lib做出来的库
*
* 当前版本:v0.1
* 作 者:福柯
* 完成日期:2007年01月23日
*
* Copyright (c) 2007,Programming Lab.
* All rights reserved.
*********************************************************************/

#include <iostream>
#include <string>
#include "crypto_supp.h"
#include "DLL.h"

using namespace std;

int main(int argc, char *argv[],char *env[])
{
        string res;
        CRYPTO_DllMain(GetModuleHandle(0),DLL_PROCESS_ATTACH,0);

        res=DesEn("37159371","Jrji48HJFwer428KdEJ9");
        cout<<res.substr(0,res.size()-5)<<endl;

        res=DesDe("C2567E70BC78013D","88372239");       
        cout<<res.substr(0,res.size()-5)<<endl;

        res=MD5En("0F17EC90DCB27C03");
        cout<<res.substr(0,res.size()-5)<<endl;

        CRYPTO_DllMain(GetModuleHandle(0),DLL_PROCESS_DETACH,0);

        char c=0;
        while(cin>>c);
        return 0;
}
////////////////////////////////////////
这个库不知道谁做的,加密后的代码总有个尾巴,ksaiy。管它呢,反正是能用了。只是不明白哪个是key哪个是data.
2007-1-23 21:21
0
游客
登录 | 注册 方可回帖
返回
//