吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3609|回复: 15

已追踪到算法部分,就是看得不太理解,希望各位大神帮忙看看这个算法

 关闭 [复制链接]
chinmo 发表于 2014-10-25 22:35 | 显示全部楼层 |阅读模式

用户名:464201637
机器码:1214756169
注册码:9DE02360A7E1226E98FE1B799EF81B7990F51D7A
到期日期:2014-04-30
注册等级:03
明码:4642016370320140430 (明码实际就是由用户名,注册等级,以及到期日期组成的)
上面是信息,等会再说明,下面先把通过注册码跟机器码算出明码的算法代码贴出来,我只是看懂了一部分,望大神们解释一下具体的算法
  1. 0049DD11    85C0            test eax,eax
  2. 0049DD13    0F84 5C020000   je 测试.0049DF75
  3. 0049DD19    8D45 98         lea eax,dword ptr ss:[ebp-0x68]
  4. 0049DD1C    8D4D DC         lea ecx,dword ptr ss:[ebp-0x24]
  5. 0049DD1F    50              push eax
  6. 0049DD20    51              push ecx
  7. 0049DD21    C785 50FFFFFF B>mov dword ptr ss:[ebp-0xB0],测试.0040C>; &H
  8. 0049DD2B    C785 48FFFFFF 0>mov dword ptr ss:[ebp-0xB8],0x8
  9. 0049DD35    895D A0         mov dword ptr ss:[ebp-0x60],ebx
  10. 0049DD38    895D 98         mov dword ptr ss:[ebp-0x68],ebx
  11. 0049DD3B    FF15 C8114000   call dword ptr ds:[<&MSVBVM60.__vbaI4Var>; msvbvm60.__vbaI4Var
  12. 0049DD41    8B55 14         mov edx,dword ptr ss:[ebp+0x14]
  13. 0049DD44    50              push eax;从第几位开始,这里第一次是从第3个开始
  14. 0049DD45    8B02            mov eax,dword ptr ds:[edx]
  15. 0049DD47    50              push eax
  16. 0049DD48    FF15 BC104000   call dword ptr ds:[<&MSVBVM60.#631>]     ; msvbvm60.rtcMidCharBstr;从第几位开始截取2个字符。得出eax=E0(第一次截取)
  17. 0049DD4E    8D4D 88         lea ecx,dword ptr ss:[ebp-0x78]
  18. 0049DD51    8D95 78FFFFFF   lea edx,dword ptr ss:[ebp-0x88]
  19. 0049DD57    51              push ecx
  20. 0049DD58    52              push edx
  21. 0049DD59    8945 90         mov dword ptr ss:[ebp-0x70],eax
  22. 0049DD5C    C745 88 0800000>mov dword ptr ss:[ebp-0x78],0x8
  23. 0049DD63    FF15 AC104000   call dword ptr ds:[<&MSVBVM60.#520>]     ; msvbvm60.rtcTrimVar
  24. 0049DD69    8D85 48FFFFFF   lea eax,dword ptr ss:[ebp-0xB8]
  25. 0049DD6F    8D8D 78FFFFFF   lea ecx,dword ptr ss:[ebp-0x88]
  26. 0049DD75    50              push eax
  27. 0049DD76    8D95 68FFFFFF   lea edx,dword ptr ss:[ebp-0x98]
  28. 0049DD7C    51              push ecx
  29. 0049DD7D    52              push edx
  30. 0049DD7E    FFD6            call esi                                 ; msvbvm60.__vbaVarAdd 跟&H连接组合字符串&HE0
  31. 0049DD80    50              push eax
  32. 0049DD81    8D45 AC         lea eax,dword ptr ss:[ebp-0x54]
  33. 0049DD84    50              push eax
  34. 0049DD85    FF15 60114000   call dword ptr ds:[<&MSVBVM60.__vbaStrVa>; msvbvm60.__vbaStrVarVal 把字符转ascii码 从字符串特点位置上获取其值
  35. 0049DD8B    50              push eax;&HE0
  36. 0049DD8C    FF15 2C124000   call dword ptr ds:[<&MSVBVM60.#581>]     ; msvbvm60.rtcR8ValFromBstr //把字符串转换成浮点数
  37. 0049DD92    FF15 E0114000   call dword ptr ds:[<&MSVBVM60.__vbaFpI2>>; msvbvm60.__vbaFpI2
  38. 0049DD98    8D4D AC         lea ecx,dword ptr ss:[ebp-0x54]
  39. 0049DD9B    8945 B0         mov dword ptr ss:[ebp-0x50],eax
  40. 0049DD9E    FF15 28124000   call dword ptr ds:[<&MSVBVM60.__vbaFreeS>; msvbvm60.__vbaFreeStr
  41. 0049DDA4    8D8D 68FFFFFF   lea ecx,dword ptr ss:[ebp-0x98]
  42. 0049DDAA    8D95 78FFFFFF   lea edx,dword ptr ss:[ebp-0x88]
  43. 0049DDB0    51              push ecx
  44. 0049DDB1    8D45 88         lea eax,dword ptr ss:[ebp-0x78]
  45. 0049DDB4    52              push edx
  46. 0049DDB5    8D4D 98         lea ecx,dword ptr ss:[ebp-0x68]
  47. 0049DDB8    50              push eax
  48. 0049DDB9    51              push ecx
  49. 0049DDBA    6A 04           push 0x4
  50. 0049DDBC    FF15 34104000   call dword ptr ds:[<&MSVBVM60.__vbaFreeV>; msvbvm60.__vbaFreeVarList
  51. 0049DDC2    83C4 14         add esp,0x14
  52. 0049DDC5    66:3B7D B4      cmp di,word ptr ss:[ebp-0x4C]
  53. 0049DDC9    7D 0C           jge 测试.0049DDD7
  54. 0049DDCB    66:83C7 01      add di,0x1
  55. 0049DDCF    0F80 62020000   jo 测试.0049E037
  56. 0049DDD5    EB 05           jmp 测试.0049DDDC
  57. 0049DDD7    BF 01000000     mov edi,0x1
  58. 0049DDDC    8B4D 10         mov ecx,dword ptr ss:[ebp+0x10]
  59. 0049DDDF    8D55 98         lea edx,dword ptr ss:[ebp-0x68]
  60. 0049DDE2    0FBFC7          movsx eax,di
  61. 0049DDE5    52              push edx
  62. 0049DDE6    8B11            mov edx,dword ptr ds:[ecx];ecx的值是机器码后8位
  63. 0049DDE8    50              push eax;
  64. 0049DDE9    52              push edx;机器码后8位
  65. 0049DDEA    C745 A0 0100000>mov dword ptr ss:[ebp-0x60],0x1
  66. 0049DDF1    895D 98         mov dword ptr ss:[ebp-0x68],ebx
  67. 0049DDF4    FF15 BC104000   call dword ptr ds:[<&MSVBVM60.#631>]     ; msvbvm60.rtcMidCharBstr;从第一个开始截取,每次截取1个字符
  68. 0049DDFA    8BD0            mov edx,eax;
  69. 0049DDFC    8D4D AC         lea ecx,dword ptr ss:[ebp-0x54]
  70. 0049DDFF    FF15 00124000   call dword ptr ds:[<&MSVBVM60.__vbaStrMo>; msvbvm60.__vbaStrMove
  71. 0049DE05    50              push eax
  72. 0049DE06    FF15 40104000   call dword ptr ds:[<&MSVBVM60.#516>]     ; msvbvm60.rtcAnsiValueBstr;把字符转为数据,在eax反馈结果
  73. 0049DE0C    8B4D B0         mov ecx,dword ptr ss:[ebp-0x50]
  74. 0049DE0F    8D95 48FFFFFF   lea edx,dword ptr ss:[ebp-0xB8]
  75. 0049DE15    33C1            xor eax,ecx
  76. 0049DE17    8D4D C4         lea ecx,dword ptr ss:[ebp-0x3C];
  77. 0049DE1A    66:8985 50FFFFF>mov word ptr ss:[ebp-0xB0],ax;
  78. 0049DE21    899D 48FFFFFF   mov dword ptr ss:[ebp-0xB8],ebx
  79. 0049DE27    FF15 18104000   call dword ptr ds:[<&MSVBVM60.__vbaVarMo>; msvbvm60.__vbaVarMove
  80. 0049DE2D    8D4D AC         lea ecx,dword ptr ss:[ebp-0x54]
  81. 0049DE30    FF15 28124000   call dword ptr ds:[<&MSVBVM60.__vbaFreeS>; msvbvm60.__vbaFreeStr;把字符串参数的内存回收 //释放字符串变量
  82. 0049DE36    8D4D 98         lea ecx,dword ptr ss:[ebp-0x68];
  83. 0049DE39    FF15 1C104000   call dword ptr ds:[<&MSVBVM60.__vbaFreeV>; msvbvm60.__vbaFreeVar //释放对象变量
  84. 0049DE3F    66:8B45 BC      mov ax,word ptr ss:[ebp-0x44];
  85. 0049DE43    8D4D C4         lea ecx,dword ptr ss:[ebp-0x3C];
  86. 0049DE46    8D95 58FFFFFF   lea edx,dword ptr ss:[ebp-0xA8]
  87. 0049DE4C    51              push ecx
  88. 0049DE4D    52              push edx
  89. 0049DE4E    66:8985 60FFFFF>mov word ptr ss:[ebp-0xA0],ax
  90. 0049DE55    C785 58FFFFFF 0>mov dword ptr ss:[ebp-0xA8],0x8002
  91. 0049DE5F    FF15 6C104000   call dword ptr ds:[<&MSVBVM60.__vbaVarTs>; msvbvm60.__vbaVarTstLe
  92. 0049DE65    66:85C0         test ax,ax
  93. 0049DE68    74 5A           je 测试.0049DEC4
  94. 0049DE6A    66:8B45 BC      mov ax,word ptr ss:[ebp-0x44]
  95. 0049DE6E    8D8D 58FFFFFF   lea ecx,dword ptr ss:[ebp-0xA8]
  96. 0049DE74    66:8985 50FFFFF>mov word ptr ss:[ebp-0xB0],ax
  97. 0049DE7B    8D55 C4         lea edx,dword ptr ss:[ebp-0x3C]
  98. 0049DE7E    51              push ecx
  99. 0049DE7F    8D45 98         lea eax,dword ptr ss:[ebp-0x68]
  100. 0049DE82    52              push edx
  101. 0049DE83    50              push eax
  102. 0049DE84    C785 60FFFFFF F>mov dword ptr ss:[ebp-0xA0],0xFF
  103. 0049DE8E    899D 58FFFFFF   mov dword ptr ss:[ebp-0xA8],ebx
  104. 0049DE94    899D 48FFFFFF   mov dword ptr ss:[ebp-0xB8],ebx
  105. 0049DE9A    FFD6            call esi;vbaVarAdd      ->两个变量值相加
  106. 0049DE9C    8D8D 48FFFFFF   lea ecx,dword ptr ss:[ebp-0xB8]
  107. 0049DEA2    50              push eax
  108. 0049DEA3    8D55 88         lea edx,dword ptr ss:[ebp-0x78]
  109. 0049DEA6    51              push ecx
  110. 0049DEA7    52              push edx
  111. 0049DEA8    FF15 04104000   call dword ptr ds:[<&MSVBVM60.__vbaVarSu>; msvbvm60.__vbaVarSub 变量相减,在eax中返回
  112. 0049DEAE    8BD0            mov edx,eax
  113. 0049DEB0    8D4D C4         lea ecx,dword ptr ss:[ebp-0x3C]
  114. 0049DEB3    FF15 18104000   call dword ptr ds:[<&MSVBVM60.__vbaVarMo>; msvbvm60.__vbaVarMove
  115. 0049DEB9    8D4D 98         lea ecx,dword ptr ss:[ebp-0x68]
  116. 0049DEBC    FF15 1C104000   call dword ptr ds:[<&MSVBVM60.__vbaFreeV>; msvbvm60.__vbaFreeVar
  117. 0049DEC2    EB 31           jmp 测试.0049DEF5
  118. 0049DEC4    66:8B45 BC      mov ax,word ptr ss:[ebp-0x44]
  119. 0049DEC8    8D4D C4         lea ecx,dword ptr ss:[ebp-0x3C]
  120. 0049DECB    66:8985 60FFFFF>mov word ptr ss:[ebp-0xA0],ax
  121. 0049DED2    8D95 58FFFFFF   lea edx,dword ptr ss:[ebp-0xA8]
  122. 0049DED8    51              push ecx
  123. 0049DED9    8D45 98         lea eax,dword ptr ss:[ebp-0x68]
  124. 0049DEDC    52              push edx
  125. 0049DEDD    50              push eax
  126. 0049DEDE    899D 58FFFFFF   mov dword ptr ss:[ebp-0xA8],ebx
  127. 0049DEE4    FF15 04104000   call dword ptr ds:[<&MSVBVM60.__vbaVarSu>; msvbvm60.__vbaVarSub
  128. 0049DEEA    8BD0            mov edx,eax
  129. 0049DEEC    8D4D C4         lea ecx,dword ptr ss:[ebp-0x3C]
  130. 0049DEEF    FF15 18104000   call dword ptr ds:[<&MSVBVM60.__vbaVarMo>; msvbvm60.__vbaVarMove 变体变量赋值(一般用于数值变量) 把变量1赋值给变量2
  131. 0049DEF5    8B4D B8         mov ecx,dword ptr ss:[ebp-0x48];把上一个算出来的值赋给ecx;第一次是为空,第二次是明码的是第一个
  132. 0049DEF8    8D55 C4         lea edx,dword ptr ss:[ebp-0x3C]
  133. 0049DEFB    52              push edx
  134. 0049DEFC    898D 60FFFFFF   mov dword ptr ss:[ebp-0xA0],ecx
  135. 0049DF02    C785 58FFFFFF 0>mov dword ptr ss:[ebp-0xA8],0x8
  136. 0049DF0C    FF15 C8114000   call dword ptr ds:[<&MSVBVM60.__vbaI4Var>; msvbvm60.__vbaI4Var 截取字符串
  137. 0049DF12    50              push eax
  138. 0049DF13    8D45 98         lea eax,dword ptr ss:[ebp-0x68]
  139. 0049DF16    50              push eax
  140. 0049DF17    FF15 54114000   call dword ptr ds:[<&MSVBVM60.#608>]     ; msvbvm60.rtcVarBstrFromAnsi
  141. 0049DF23    8D55 98         lea edx,dword ptr ss:[ebp-0x68]
  142. 0049DF26    51              push ecx
  143. 0049DF27    8D45 88         lea eax,dword ptr ss:[ebp-0x78]
  144. 0049DF2A    52              push edx
  145. 0049DF2B    50              push eax
  146. 0049DF2C    FFD6            call esi;vbaVarAdd      ->两个变量值相加 把上次结算出来的值跟本次的值连接起来,比如第二次计算出来是4,本次计算出来是6,那么就是eax=46
  147. 0049DF2E    50              push eax
  148. 0049DF2F    FF15 28104000   call dword ptr ds:[<&MSVBVM60.__vbaStrVa>; msvbvm60.__vbaStrVarMove
  149. 0049DF35    8BD0            mov edx,eax
  150. 0049DF37    8D4D B8         lea ecx,dword ptr ss:[ebp-0x48]
  151. 0049DF3A    FF15 00124000   call dword ptr ds:[<&MSVBVM60.__vbaStrMo>; msvbvm60.__vbaStrMove
  152. 0049DF40    8D4D 88         lea ecx,dword ptr ss:[ebp-0x78]
  153. 0049DF43    8D55 98         lea edx,dword ptr ss:[ebp-0x68]
  154. 0049DF46    51              push ecx
  155. 0049DF47    52              push edx
  156. 0049DF48    53              push ebx
  157. 0049DF49    FF15 34104000   call dword ptr ds:[<&MSVBVM60.__vbaFreeV>; msvbvm60.__vbaFreeVarList
  158. 0049DF4F    8B45 B0         mov eax,dword ptr ss:[ebp-0x50]
  159. 0049DF52    83C4 0C         add esp,0xC
  160. 0049DF55    8D8D F8FEFFFF   lea ecx,dword ptr ss:[ebp-0x108]
  161. 0049DF5B    8945 BC         mov dword ptr ss:[ebp-0x44],eax
  162. 0049DF5E    8D95 08FFFFFF   lea edx,dword ptr ss:[ebp-0xF8]
  163. 0049DF64    51              push ecx
  164. 0049DF65    8D45 DC         lea eax,dword ptr ss:[ebp-0x24]
  165. 0049DF68    52              push edx
  166. 0049DF69    50              push eax
  167. 0049DF6A    FF15 1C124000   call dword ptr ds:[<&MSVBVM60.__vbaVarFo>; msvbvm60.__vbaVarForNext 循环
  168. 0049DF70  ^ E9 9CFDFFFF     jmp 测试.0049DD11
复制代码
上面就是算法代码,这段算法是从注册码(9DE02360A7E1226E98FE1B799EF81B7990F51D7A)的第三个开始的,也就是E02360A7E1226E98FE1B799EF81B7990F51D7A 这里开始计算,机器码(1214756169)他是取后8位,也就是14756169进行计算的
目前我能理解的是(注:也不知道对不对):
每次读取注册码(E02360A7E1226E98FE1B799EF81B7990F51D7A)的2位,跟&H组合行16进制, 机器码(14756169)的是每次读取一位,然后不知道通过什么计算得出明码的每一位,机器码是循环读取的,也就是说机器码逐个取完了,就从新开始逐个取,然后跟机器码得出的数字计算


上面就是我缩了解的,具体的他是怎么计算出明码的,没看出来,哪位大神指点一下啊


吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| chinmo 发表于 2014-10-25 22:36 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
vip 发表于 2014-10-25 22:53 | 显示全部楼层

表示不明白,路过
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
虚竹 发表于 2014-10-25 23:10 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| chinmo 发表于 2014-10-25 23:11 | 显示全部楼层

扫地僧 发表于 2014-10-25 22:45
这么长啊,求大神回答

帮忙看下啊,里面我已经把我跟踪的一些信息都注释里面了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
起凡第一华佗 发表于 2014-10-25 23:29 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| chinmo 发表于 2014-10-26 10:36 | 显示全部楼层

晕死,偌大一个论坛没有懂的?
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
微笑的耗子 发表于 2014-10-26 11:23 | 显示全部楼层

算法是大牛来弄的
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| chinmo 发表于 2014-10-27 12:11 | 显示全部楼层

@雨季 @Shark恒
大神们,帮忙看看吧
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| chinmo 发表于 2014-10-29 14:49 | 显示全部楼层

汗!,竟然木有人
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表