- UID
- 127
注册时间2005-2-3
阅读权限20
最后登录1970-1-1
以武会友
TA的每日心情 | 开心 2023-12-22 19:44 |
---|
签到天数: 44 天 [LV.5]常住居民I
|
研究了1天终于把全国电话通1.30给搞定了,大家随便看看吧~喜欢的支持下噢~
【破文作者】 Saver[PYG]
【 作者QQ 】 562194
【文章题目】 Saver申请加入7
【软件名称】 全国电话通1.30
【下载地址】 http://www.onlinedown.net/soft/22381.htm
----------------------------------------------------------------------------------------------
【加密方式】 UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
【破解工具】 peid,od,recimport
【破解平台】 XP SP2
----------------------------------------------------------------------------------------------
【软件简介】
1.上海电话号码归属地查询(特色功能) 2.全国电话号码归属地查询(特色功能) 3.全国手机号码归属地查询 4.全国身份证号码查询 5.全国邮政编码查询 软件特色: 我们的数据库截止2003年12月1日,已经超过了32万。我们的数据库在不断的增加中(在线反馈,邮件反馈,工作人员反馈)。我们的数据库采用内嵌式,不需要任何数据库驱动引擎,真正的绿色软件。界面采用XP风格,简单上手。更新速度快,包括主程序和数据库。
【文章简介】
找出注册码
----------------------------------------------------------------------------------------------
【破解过程】
先用peid查看了下是UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
很简单,就手动脱了。用od载入,来到在这里
008F0A30 > 60 pushad /////来到这里
008F0A31 BE 00007C00 mov esi,全国电话.007C0000
008F0A36 8DBE 0010C4FF lea edi,dword ptr ds:[esi+FFC41000]
/////////////////////////////////////////////////////////////////////
根据堆栈平衡,往下找popad
008F0B87 83C3 04 add ebx,4
008F0B8A ^ EB E1 jmp short 全国电话.008F0B6D
008F0B8C FF96 B41F4F00 call dword ptr ds:[esi+4F1FB4]
008F0B92 61 popad ////////F4到这
008F0B93 - E9 8CA9BBFF jmp 全国电话.004AB524 ////////大跳,F8后
//////////////////////////////////////////////////////////////////////
来到这
004AB524 55 push ebp ////////来到这
004AB525 8BEC mov ebp,esp
004AB527 83C4 F0 add esp,-10
004AB52A B8 CCB14A00 mov eax,全国电话.004AB1CC
004AB52F E8 14ABF5FF call 全国电话.00406048
好,我们就用od自带的脱壳进程,选1,脱出来后,无法运行。说是“没有找到c.dll
打开原文件,用ImoprtREC载入,oep选刚脱出来的即:4ab524,点自动搜索IAT后,
全为真,好,我们在fix都刚脱出来的文件。再运行,这次都是没有提示了。但启动
画面结束后就自动退出了,看来是有自效验了。好,正式工作就要开始了~~GoGoGo~~
/////////////////////////////////////////////////////////////////////////
根据使用,可以发现,该软件再注册后会在该文件夹下生成一个user.ini文件,里面
放着就是你的注册名和注册码,看来该软件就是通过这个来效验的。好,那我们就在
od里找这个吧。一共有3个地方是用到了user.ini。分别为以下3处:
第一处:
* Possible StringData Ref from Data Obj ->"user.ini" //////这里1
|
:004A7022 BA74764A00 mov edx, 004A7674
:004A7027 E8C8D3F5FF call 004043F4
:004A702C 8B9598FBFFFF mov edx, dword ptr [ebp+FFFFFB98]
:004A7032 8D85F8FEFFFF lea eax, dword ptr [ebp+FFFFFEF8]
:004A7038 B9FF000000 mov ecx, 000000FF
:004A703D E886D3F5FF call 004043C8
:004A7042 8D8590FBFFFF lea eax, dword ptr [ebp+FFFFFB90]
:004A7048 8D95F8FEFFFF lea edx, dword ptr [ebp+FFFFFEF8]
:004A704E E83DD3F5FF call 00404390
:004A7053 8B8D90FBFFFF mov ecx, dword ptr [ebp+FFFFFB90]
:004A7059 B201 mov dl, 01
/////////////////////////////////////////
第2处
* Possible StringData Ref from Data Obj ->"user.ini" //////这里2
|
:004A8A9B BACC8B4A00 mov edx, 004A8BCC
:004A8AA0 E84FB9F5FF call 004043F4
:004A8AA5 8B95FCFEFFFF mov edx, dword ptr [ebp+FFFFFEFC]
:004A8AAB 8D8500FFFFFF lea eax, dword ptr [ebp+FFFFFF00]
:004A8AB1 B9FF000000 mov ecx, 000000FF
:004A8AB6 E80DB9F5FF call 004043C8
:004A8ABB 8D85F4FEFFFF lea eax, dword ptr [ebp+FFFFFEF4]
:004A8AC1 8D9500FFFFFF lea edx, dword ptr [ebp+FFFFFF00]
:004A8AC7 E8C4B8F5FF call 00404390
:004A8ACC 8B8DF4FEFFFF mov ecx, dword ptr [ebp+FFFFFEF4]
:004A8AD2 B201 mov dl, 01
/////////////////////////////////////////
第3
* Possible StringData Ref from Data Obj ->"user.ini"
|
:004A8CFB BA488E4A00 mov edx, 004A8E48
:004A8D00 E8EFB6F5FF call 004043F4
:004A8D05 8B95FCFEFFFF mov edx, dword ptr [ebp+FFFFFEFC]
:004A8D0B 8D8500FFFFFF lea eax, dword ptr [ebp+FFFFFF00]
:004A8D11 B9FF000000 mov ecx, 000000FF
:004A8D16 E8ADB6F5FF call 004043C8
:004A8D1B 8D85F4FEFFFF lea eax, dword ptr [ebp+FFFFFEF4]
:004A8D21 8D9500FFFFFF lea edx, dword ptr [ebp+FFFFFF00]
:004A8D27 E864B6F5FF call 00404390
:004A8D2C 8B8DF4FEFFFF mov ecx, dword ptr [ebp+FFFFFEF4]
:004A8D32 B201 mov dl, 01
///////////////////////////////////////////////////////////////////////
由于不知道软件是从哪个验证的,我们就在这3个地方先全下断,等知道后,再
把其他的取消掉
好,F9运行,停在这里
004A7022 BA 74764A00 mov edx,全国.004A7674 ////停在这里user.ini
004A7027 E8 C8D3F5FF call 全国.004043F4
004A702C 8B95 98FBFFFF mov edx,dword ptr ss:[ebp-468]
004A7032 8D85 F8FEFFFF lea eax,dword ptr ss:[ebp-108]
004A7038 B9 FF000000 mov ecx,0FF
004A703D E8 86D3F5FF call 全国.004043C8
004A7042 8D85 90FBFFFF lea eax,dword ptr ss:[ebp-470]
004A7048 8D95 F8FEFFFF lea edx,dword ptr ss:[ebp-108]
004A704E E8 3DD3F5FF call 全国.00404390
004A7053 8B8D 90FBFFFF mov ecx,dword ptr ss:[ebp-470]
004A7059 B2 01 mov dl,1
004A705B A1 E42C4300 mov eax,dword ptr ds:[432CE4]
004A7060 E8 2FBDF8FF call 全国.00432D94
004A7065 A3 24FF4A00 mov dword ptr ds:[4AFF24],eax
004A706A 6A 00 push 0
004A706C 8D85 8CFBFFFF lea eax,dword ptr ss:[ebp-474]
004A7072 50 push eax
004A7073 B9 88764A00 mov ecx,全国.004A7688
004A7078 BA 98764A00 mov edx,全国.004A7698
004A707D A1 24FF4A00 mov eax,dword ptr ds:[4AFF24]
004A7082 8B18 mov ebx,dword ptr ds:[eax]
004A7084 FF13 call dword ptr ds:[ebx]
004A7086 8B95 8CFBFFFF mov edx,dword ptr ss:[ebp-474]
004A708C 8D85 F8FDFFFF lea eax,dword ptr ss:[ebp-208]
004A7092 B9 FF000000 mov ecx,0FF
004A7097 E8 2CD3F5FF call 全国.004043C8
004A709C 68 AC764A00 push 全国.004A76AC
004A70A1 8D85 88FBFFFF lea eax,dword ptr ss:[ebp-478]
004A70A7 50 push eax
004A70A8 B9 C0764A00 mov ecx,全国.004A76C0
004A70AD BA D4764A00 mov edx,全国.004A76D4
004A70B2 A1 24FF4A00 mov eax,dword ptr ds:[4AFF24]
004A70B7 8B18 mov ebx,dword ptr ds:[eax]
004A70B9 FF13 call dword ptr ds:[ebx] ////取注册名
004A70BB 8B95 88FBFFFF mov edx,dword ptr ss:[ebp-478] ////edx=[ebp-478]里的值,即为你的注册名
004A70C1 8B45 FC mov eax,dword ptr ss:[ebp-4]
004A70C4 05 B0050000 add eax,5B0
004A70C9 B9 FF000000 mov ecx,0FF
004A70CE E8 F5D2F5FF call 全国.004043C8 ////取长度
004A70D3 68 E4764A00 push 全国.004A76E4
004A70D8 8D85 84FBFFFF lea eax,dword ptr ss:[ebp-47C]
004A70DE 50 push eax
004A70DF B9 F0764A00 mov ecx,全国.004A76F0
004A70E4 BA D4764A00 mov edx,全国.004A76D4
004A70E9 A1 24FF4A00 mov eax,dword ptr ds:[4AFF24]
004A70EE 8B18 mov ebx,dword ptr ds:[eax]
004A70F0 FF13 call dword ptr ds:[ebx] ////取注册码
004A70F2 8B95 84FBFFFF mov edx,dword ptr ss:[ebp-47C] ////edx=[ebp-47c]为你的注册码
004A70F8 8B45 FC mov eax,dword ptr ss:[ebp-4] ////eax=[ebp-4]里的值
004A70FB 05 B0060000 add eax,6B0
004A7100 B9 FF000000 mov ecx,0FF
004A7105 E8 BED2F5FF call 全国.004043C8 ////取注册码长度
004A710A 8B45 FC mov eax,dword ptr ss:[ebp-4]
004A710D 80B8 B0060000 00 cmp byte ptr ds:[eax+6B0],0 ////注册码是否为空
004A7114 75 0C jnz short 全国.004A7122 ////为空就不跳
004A7116 8B45 FC mov eax,dword ptr ss:[ebp-4]
004A7119 66:C780 B0060000 0>mov word ptr ds:[eax+6B0],3001
004A7122 33DB xor ebx,ebx ////清0
004A7124 68 00010000 push 100
004A7129 8D85 F8FCFFFF lea eax,dword ptr ss:[ebp-308]
004A712F 50 push eax
004A7130 E8 7FF2F5FF call <jmp.&kernel32.GetWindowsDirect>
004A7135 83FB 06 cmp ebx,6
004A7138 0F8D B5000000 jge 全国.004A71F3
004A713E 8D85 7CFBFFFF lea eax,dword ptr ss:[ebp-484] ////回到这
004A7144 8B55 FC mov edx,dword ptr ss:[ebp-4]
004A7147 81C2 B0050000 add edx,5B0
004A714D E8 3ED2F5FF call 全国.00404390 ////取注册名
004A7152 8B85 7CFBFFFF mov eax,dword ptr ss:[ebp-484]
004A7158 8D95 80FBFFFF lea edx,dword ptr ss:[ebp-480]
004A715E E8 1110F6FF call 全国.00408174
004A7163 8B85 80FBFFFF mov eax,dword ptr ss:[ebp-480]
004A7169 8B149D D4E14A00 mov edx,dword ptr ds:[ebx*4+4AE1D4] ////取crsky,crsky[BCG],leozem[YCG],yzez,leozem
////前辈啊~以前破过此软件的牛人吧(偶自己猜的)
004A7170 E8 C3D3F5FF call 全国.00404538 ////比较call,是就跳飞
004A7175 74 35 je short 全国.004A71AC
004A7177 8D85 78FBFFFF lea eax,dword ptr ss:[ebp-488]
004A717D 8D95 F8FCFFFF lea edx,dword ptr ss:[ebp-308]
004A7183 B9 00010000 mov ecx,100
004A7188 E8 0FD2F5FF call 全国.0040439C
004A718D 8D85 78FBFFFF lea eax,dword ptr ss:[ebp-488]
004A7193 BA 04774A00 mov edx,全国.004A7704 ////建立"\windows.ini"
004A7198 E8 57D2F5FF call 全国.004043F4
004A719D 8B85 78FBFFFF mov eax,dword ptr ss:[ebp-488]
004A71A3 E8 8418F6FF call 全国.00408A2C
004A71A8 84C0 test al,al
004A71AA 74 3D je short 全国.004A71E9
004A71AC 8D85 74FBFFFF lea eax,dword ptr ss:[ebp-48C]
004A71B2 8D95 F8FCFFFF lea edx,dword ptr ss:[ebp-308]
004A71B8 B9 00010000 mov ecx,100
004A71BD E8 DAD1F5FF call 全国.0040439C
004A71C2 8D85 74FBFFFF lea eax,dword ptr ss:[ebp-48C]
004A71C8 BA 04774A00 mov edx,全国.004A7704
004A71CD E8 22D2F5FF call 全国.004043F4
004A71D2 8B85 74FBFFFF mov eax,dword ptr ss:[ebp-48C]
004A71D8 E8 2317F6FF call 全国.00408900
004A71DD A1 90E74A00 mov eax,dword ptr ds:[4AE790]
004A71E2 8B00 mov eax,dword ptr ds:[eax]
004A71E4 E8 370EFDFF call 全国.00478020
004A71E9 43 inc ebx
004A71EA 83FB 06 cmp ebx,6 ////循环
004A71ED ^ 0F8C 4BFFFFFF jl 全国.004A713E ////跳回上面的004A713E继续比较
……………………………………………………………………
这里省略一部分代码
004A72EC E8 9FD0F5FF call 全国.00404390 ////取注册名
004A72F1 8B8D 64FBFFFF mov ecx,dword ptr ss:[ebp-49C]
004A72F7 8D85 68FBFFFF lea eax,dword ptr ss:[ebp-498]
004A72FD BA B0774A00 mov edx,全国.004A77B0
004A7302 E8 31D1F5FF call 全国.00404438
004A7307 8B95 68FBFFFF mov edx,dword ptr ss:[ebp-498]
004A730D 58 pop eax
004A730E E8 151CF9FF call 全国.00438F28
004A7313 8D85 5CFBFFFF lea eax,dword ptr ss:[ebp-4A4]
004A7319 8B55 FC mov edx,dword ptr ss:[ebp-4]
004A731C 81C2 B0050000 add edx,5B0
004A7322 E8 69D0F5FF call 全国.00404390 ////取注册名和位数
004A7327 8B8D 5CFBFFFF mov ecx,dword ptr ss:[ebp-4A4]
004A732D 8D85 60FBFFFF lea eax,dword ptr ss:[ebp-4A0]
004A7333 BA C4774A00 mov edx,全国.004A77C4
004A7338 E8 FBD0F5FF call 全国.00404438
004A733D 8B95 60FBFFFF mov edx,dword ptr ss:[ebp-4A0]
004A7343 8B45 FC mov eax,dword ptr ss:[ebp-4]
004A7346 8B80 34030000 mov eax,dword ptr ds:[eax+334]
004A734C E8 AF0DFBFF call 全国.00458100
004A7351 8D85 58FBFFFF lea eax,dword ptr ss:[ebp-4A8]
004A7357 8B55 FC mov edx,dword ptr ss:[ebp-4]
004A735A 81C2 B0060000 add edx,6B0
004A7360 E8 2BD0F5FF call 全国.00404390 ////你的注册码
004A7365 8B85 58FBFFFF mov eax,dword ptr ss:[ebp-4A8]
004A736B E8 1013F6FF call 全国.00408680
004A7370 E8 1BEBFFFF call 全国.004A5E90 ////eax存放着你的注册码加上1ed2即eax+7890
004A7375 8BD8 mov ebx,eax
004A7377 8B45 F8 mov eax,dword ptr ss:[ebp-8] ////eax=[ebp-8],是不是觉得奇怪??
004A737A E8 11EBFFFF call 全国.004A5E90
004A737F 3BD8 cmp ebx,eax ////eax真注册码,ebx你的注册码
004A7381 74 05 je short 全国.004A7388 ////相等就OK了
/////////////////////////////////////////////////////////////////////////////////////
细心的话,你会发现跟到最后居然你的注册名没派上什么用场,到是莫名其妙的多了一个
dword ptr ss:[ebp-8]这个,而且,有时还会不一样。看来关键是这里了。
好,我们向上找找看吧,在刚才中断的上面就有一个
004A6FC0 E8 DB1AF6FF call 全国.00408AA0 ////自效验开始,取文件大小
004A6FC5 85C0 test eax,eax
004A6FC7 75 23 jnz short 全国.004A6FEC ////这个跳和下面的跳的地方一样
004A6FC9 81BD A4FBFFFF 1032>cmp dword ptr ss:[ebp-45C],133210 ////和原文件大小比较,133210比原文件稍大一点,脱壳后就大了n多
004A6FD3 7E 17 jle short 全国.004A6FEC ////就是这个跳和上面的跳一样,暴的话在这就可以
004A6FD5 8D85 A0FBFFFF lea eax,dword ptr ss:[ebp-460]
004A6FDB E8 101BF6FF call 全国.00408AF0 ////自效验开始
004A6FE0 A1 90E74A00 mov eax,dword ptr ds:[4AE790]
004A6FE5 8B00 mov eax,dword ptr ds:[eax]
004A6FE7 E8 3410FDFF call 全国.00478020 ////这个call就是程序退出的关键call
////也可以在这nop掉“退出”的call
////以上这些,就可以去掉自效验了
004A6FEC 8B45 FC mov eax,dword ptr ss:[ebp-4] ////eax=[ebp-4](暗码)**
004A6FEF 6B80 B0070000 75 imul eax,dword ptr ds:[eax+7B0],75 ////eax=[eax+7b0]*75
004A6FF6 05 D4070000 add eax,7D4 ////eax=eax+7d4
004A6FFB 8945 F8 mov dword ptr ss:[ebp-8],eax ////看到了吧,就是这个
004A6FFE 8D95 94FBFFFF lea edx,dword ptr ss:[ebp-46C]
004A7004 33C0 xor eax,eax
004A7006 E8 09BAF5FF call 全国.00402A14
004A700B 8B85 94FBFFFF mov eax,dword ptr ss:[ebp-46C]
004A7011 8D95 98FBFFFF lea edx,dword ptr ss:[ebp-468]
004A7017 E8 701BF6FF call 全国.00408B8C
004A701C 8D85 98FBFFFF lea eax,dword ptr ss:[ebp-468]
004A7022 BA 74764A00 mov edx,全国.004A7674 ////刚才中断的地方
004A7027 E8 C8D3F5FF call 全国.004043F4
//////////////////////////////////////////////////////////////////
跟到这,会发现关键还是上面这个
dword ptr ds:[eax+7B0],只要这个值找到了,一切都好办了。好,在OD里看到我这里的值是11E5500
我就用硬件断点访问中断这个。CTRL+F2重来。一阵中断后,来到这里
004AAED2 56 push esi
004AAED3 8BD8 mov ebx,eax
004AAED5 33C0 xor eax,eax
004AAED7 55 push ebp
004AAED8 68 4CAF4A00 push 全国.004AAF4C
004AAEDD 64:FF30 push dword ptr fs:[eax]
004AAEE0 64:8920 mov dword ptr fs:[eax],esp
004AAEE3 E8 F4AEFFFF call 全国.004A5DDC ////这个call*里关于cpu的运算
004AAEE8 E8 AB7BF5FF call 全国.00402A98
004AAEED 8BF0 mov esi,eax ////关键值esi=eax
004AAEEF 89B3 B0070000 mov dword ptr ds:[ebx+7B0],esi
004AAEF5 8D55 F8 lea edx,dword ptr ss:[ebp-8]
004AAEF8 8B83 B0070000 mov eax,dword ptr ds:[ebx+7B0]
004AAEFE E8 41D6F5FF call 全国.00408544 ////换成10进制
004AAF03 8B45 F8 mov eax,dword ptr ss:[ebp-8]
004AAF06 E8 E194F5FF call 全国.004043EC ////取位数
004AAF0B 48 dec eax ////减1
004AAF0C 50 push eax ////入栈
004AAF0D 8D55 F4 lea edx,dword ptr ss:[ebp-C] ////[ebp-c]的地址给edx
004AAF10 8BC6 mov eax,esi ////eax=esi=刚才得到的值(16进制)
004AAF12 E8 2DD6F5FF call 全国.00408544
004AAF17 8B45 F4 mov eax,dword ptr ss:[ebp-C]
004AAF1A 8D4D FC lea ecx,dword ptr ss:[ebp-4]
004AAF1D 5A pop edx
004AAF1E E8 0557F8FF call 全国.00430628 ////取前n位,n为edx的值
004AAF23 8B45 FC mov eax,dword ptr ss:[ebp-4]
004AAF26 E8 55D7F5FF call 全国.00408680 ////关键的转换call,将值换成16进制的
004AAF2B 8983 B0070000 mov dword ptr ds:[ebx+7B0],eax ////最后一次停在这,可以看到,过了这里后
////dword ptr ds:[ebx+7B0]里就存放着我们所需
////要的值了,往上看
//////////////////////////////////////////////////////////////////////////
关键call*
004A5DDC 55 push ebp
004A5DDD 8BEC mov ebp,esp
004A5DDF 83C4 B8 add esp,-48
004A5DE2 53 push ebx
004A5DE3 C745 D8 00000100 mov dword ptr ss:[ebp-28],10000
004A5DEA 33C0 xor eax,eax
004A5DEC 8945 DC mov dword ptr ss:[ebp-24],eax
004A5DEF DF6D D8 fild qword ptr ss:[ebp-28] ////装入ebp-28,即10000
004A5DF2 D80D 885E4A00 fmul dword ptr ds:[4A5E88] ////执行乘法
004A5DF8 DF7D D8 fistp qword ptr ss:[ebp-28] ////Convert top of stack to integer
004A5DFB 9B wait
004A5DFC E8 9305F6FF call <jmp.&kernel32.GetTickCount> ////获取自windows启动以来经历的时间长度
004A5E01 8BD8 mov ebx,eax
004A5E03 E8 8C05F6FF call <jmp.&kernel32.GetTickCount>
004A5E08 3BD8 cmp ebx,eax
004A5E0A ^ 74 F7 je short 全国.004A5E03
004A5E0C 0F31 rdtsc ////CPU 内部定时器的值, 每经过一个 CPU 周期, 这个定时器就加一
004A5E0E 8955 FC mov dword ptr ss:[ebp-4],edx
004A5E11 8945 F8 mov dword ptr ss:[ebp-8],eax
004A5E14 E8 7B05F6FF call <jmp.&kernel32.GetTickCount>
004A5E19 8D93 E8030000 lea edx,dword ptr ds:[ebx+3E8]
004A5E1F 3BC2 cmp eax,edx
004A5E21 ^ 72 F1 jb short 全国.004A5E14
004A5E23 0F31 rdtsc
004A5E25 8955 F4 mov dword ptr ss:[ebp-C],edx
004A5E28 8945 F0 mov dword ptr ss:[ebp-10],eax
004A5E2B 8B45 F4 mov eax,dword ptr ss:[ebp-C]
004A5E2E 8945 D0 mov dword ptr ss:[ebp-30],eax
004A5E31 33C0 xor eax,eax
004A5E33 8945 D4 mov dword ptr ss:[ebp-2C],eax
004A5E36 DF6D D0 fild qword ptr ss:[ebp-30]
004A5E39 DF6D D8 fild qword ptr ss:[ebp-28]
004A5E3C DEC9 fmulp st(1),st
004A5E3E 8B45 F0 mov eax,dword ptr ss:[ebp-10]
004A5E41 8945 C8 mov dword ptr ss:[ebp-38],eax
004A5E44 33C0 xor eax,eax
004A5E46 8945 CC mov dword ptr ss:[ebp-34],eax
004A5E49 DF6D C8 fild qword ptr ss:[ebp-38]
004A5E4C DEC1 faddp st(1),st
004A5E4E 8B45 FC mov eax,dword ptr ss:[ebp-4]
004A5E51 8945 C0 mov dword ptr ss:[ebp-40],eax
004A5E54 33C0 xor eax,eax
004A5E56 8945 C4 mov dword ptr ss:[ebp-3C],eax
004A5E59 DF6D C0 fild qword ptr ss:[ebp-40]
004A5E5C DF6D D8 fild qword ptr ss:[ebp-28]
004A5E5F DEC9 fmulp st(1),st
004A5E61 8B45 F8 mov eax,dword ptr ss:[ebp-8]
004A5E64 8945 B8 mov dword ptr ss:[ebp-48],eax
004A5E67 33C0 xor eax,eax
004A5E69 8945 BC mov dword ptr ss:[ebp-44],eax
004A5E6C DF6D B8 fild qword ptr ss:[ebp-48]
004A5E6F DEC1 faddp st(1),st
004A5E71 DEE9 fsubp st(1),st
004A5E73 D835 8C5E4A00 fdiv dword ptr ds:[4A5E8C]
004A5E79 DB7D E0 fstp tbyte ptr ss:[ebp-20]
004A5E7C 9B wait
004A5E7D DB6D E0 fld tbyte ptr ss:[ebp-20]
004A5E80 5B pop ebx
004A5E81 8BE5 mov esp,ebp
004A5E83 5D pop ebp
004A5E84 C3 retn
以上就是你在最注册码时会出现不一样的原因。因为在这比较你的注册码时,cpu的运算时间在变
所以导致你在004A7377处的真注册码会不一样。跟踪到这时,我已经有点绝望了~用cpu的运算时间
来比较,那不是去死了嘛,于是,我放下这玩意~,就去被人蹂躏了n盘星际争霸后,突然想到,我
们的机器码到现在还没有用到呢,追追这个吧~
刚开始也是没头绪的说,看到是“158433”,我这的机器码,想到了,会不会也是从16进制转成
10进制的呢,找到上面的转换成10进制的call,即call 全国.00408544这个,在OD里运行(已去除
自效验),找到00408544这个地址,F2中断后,点注册软件,OK,中断,停在这里
///////////////////////////////////////////////////////////////////////////////////
00408544 56 push esi ////停在这里
00408545 89E6 mov esi,esp
00408547 83EC 10 sub esp,10
0040854A 31C9 xor ecx,ecx
0040854C 52 push edx
0040854D 31D2 xor edx,edx
0040854F E8 A4FFFFFF call 全国.004084F8
00408554 89F2 mov edx,esi
00408556 58 pop eax
00408557 E8 C0BCFFFF call 全国.0040421C
0040855C 83C4 10 add esp,10
0040855F 5E pop esi
00408560 C3 retn ////retn后会来到下面这个地方
///////////////////////////////////////////////////////////////////////////////////
机器码算法
004AA0C4 E8 67E2FAFF call 全国.00458330
004AA0C9 8D55 FC lea edx,dword ptr ss:[ebp-4] ////暗码**(一直找的值)
004AA0CC 6983 B0070000 D407>imul eax,dword ptr ds:[ebx+7B0],7D4 ////取暗码[ebx+7b0]*7d4
004AA0D6 83C0 75 add eax,75 ////eax=eax+75
004AA0D9 E8 66E4F5FF call 全国.00408544 ////转成10进制,得到机器码
004AA0DE 8B55 FC mov edx,dword ptr ss:[ebp-4] ////上面retn到这里,向上看
004AA0E1 8B83 28050000 mov eax,dword ptr ds:[ebx+528]
////////////////////////////////////////////////////////////////////////////////////
好了,到这,总算是追出来了,总结下算法。
在软件通过对cpu的操作,取的一个值即上面的dword ptr ds:[ebx+7B0]这个里的值(m),而后
算出这个m=(m*75)+7d4
通过机器码得到的值:dword ptr ds:[ebx+7B0]里的值(n)而且算出n=(n*7d4)+75
(上面的值全为16进制的)
注册机如下
int i;
private void button1_Click(object sender, System.EventArgs e)
{
i=int.Parse(textBox1.Text); //textBox1里输入机器码
i=i-117;
i=i/2004;
i=i*117;
i=i+2004;
textBox2.Text=i.ToString(); //textBox2里显示注册码
}
----------------------------------------------------------------------------------------------
【破解心得】
通过分析该软件,又让我更一步加深了对算法的理解。
----------------------------------------------------------------------------------------------
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
----------------------------------------------------------------------------------------------
文章写于2005-2-18 17:39:10 |
|