一个双层壳追踪注册码的全过程
本帖最后由 heing 于 2010-5-1 00:41 编辑大家好!这是我第二次发表的文章,谢谢大家的支持!
下面介绍这款软件:记忆力训练软件
软件介绍: 这是一款简单易用的记忆力训练软件
这款软件的下载地址百度里查,我就不给地址了!
声明: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
不得将内容用于商业或者非法用途,否则,一切后果请用户自负。
peid查壳一下
查一下壳发现是ASPACK2.12的,其实它里面还有一个是老王壳!
用外部扫描一下是 ASProtect V2.X DLL -> Alexey Solodovnikov *
看区段有EPE,估计是老王的! 用ESP定律脱出来的是ASPROTECT 的壳!
把软件试注册一下,注意你会发现在D盘里生成一个dosame的文件夹!下面我们开始吧!
这个我已经注册了。
该软件是通过机器码来算注册码的,我的机器码是9713454651
注意:如果OD载入,自动退出的话,要换一个OD。下面就是具体过程!
下bp GetPrivateProfileStringA
**************************************************************************
当堆栈窗口出现下面的信息:
03A9D6EC 0128C6D3/CALL 到 GetPrivateProfileStringA 来自 krnln.0128C6CD
03A9D6F0 0040C8A3|Section = "记忆力训练软件"
03A9D6F4 0040C325|Key = "注册码"
03A9D6F8 013112B4|Default = ""
03A9D6FC 03A9D720|ReturnBuffer = 03A9D720
03A9D700 00002800|BufSize = 2800 (10240.)
03A9D704 0024A520\IniFileName = "D:\Dosame\Dosamesoft.p"
03A9D708 77D18734返回到 USER32.77D18734
*********
Alt+F9返回!!!返回到程序的领空!
**************************************************************************
0128C6D3 8D5424 18 lea edx,dword ptr ss: 出现假码
0128C6D7 52 push edx
0128C6D8 E8 3358FEFF call krnln.01271F10 这个call没有收获
0128C6DD 8B8C24 2C280000 mov ecx,dword ptr ss:
0128C6E4 83C4 04 add esp,4
0128C6E7 C78424 20280000 FFFF> mov dword ptr ss:,-1
0128C6F2 C74424 04 183C2E01 mov dword ptr ss:,krnln.012E3C18
0128C6FA 8901 mov dword ptr ds:,eax
0128C6FC 8D4C24 04 lea ecx,dword ptr ss:
0128C700 E8 7BD3FBFF call krnln.01249A80 这个call没有收获
0128C705 8B8C24 18280000 mov ecx,dword ptr ss:
0128C70C 5E pop esi
0128C70D 64:890D 00000000 mov dword ptr fs:,ecx
0128C714 81C4 20280000 add esp,2820
0128C71A C3 retn 直接到返回,好像要返回3-4次
********************************************************************************
当出现不在返回时,第一个CALL就是算法CALL。
00537CB2 FF35 24226701 push dword ptr ds:
00537CB8 8D45 F4 lea eax,dword ptr ss:
00537CBB 50 push eax
00537CBC E8 BC000000 call 记忆力训.00537D7D 在这里F7
00537CC1 8945 F0 mov dword ptr ss:,eax
00537CC4 8B5D F4 mov ebx,dword ptr ss:
00537CC7 85DB test ebx,ebx
********************************************************************************
进入算法CALL的标志是下面的代码:
00537D7D 55 push ebp
00537D7E 8BEC mov ebp,esp
00537D80 81EC 70000000 sub esp,70
00537D86 C745 FC 00000000 mov dword ptr ss:,0
00537D8D C745 F8 00000000 mov dword ptr ss:,0
00537D94 C745 F4 00000000 mov dword ptr ss:,0
00537D9B C745 F0 00000000 mov dword ptr ss:,0
00537DA2 C745 EC 00000000 mov dword ptr ss:,0
*******************************************************
00537E40 83C4 10 add esp,10
00537E43 8945 B8 mov dword ptr ss:,eax
00537E46 8955 BC mov dword ptr ss:,edx
00537E49 DD45 B8 fld qword ptr ss:
00537E4C DC35 2CC34000 fdiv qword ptr ds:
00537E52 DD5D B0 fstp qword ptr ss:
00537E55 68 01060080 push 80000601
00537E5A FF75 B4 push dword ptr ss:
00537E5D FF75 B0 push dword ptr ss:
00537E60 68 01000000 push 1
00537E65 BB 60000000 mov ebx,60
00537E6A E8 89A20200 call 记忆力训.005620F8
00537E8E 83C4 10 add esp,10
00537E91 8945 BC mov dword ptr ss:,eax 机器码变为"1079272739" ,这是(我的机器码/9)得的数!
00537E94 68 01030080 push 80000301
********************************************************************************
经过一系列的浮点运算~~~发现这个地方老是和假码对比!!!
0053832D 8B5D 08 mov ebx,dword ptr ss:
00538330 8B03 mov eax,dword ptr ds: 这里有可疑!
00538332 85C0 test eax,eax
00538334 75 05 jnz short 记忆力训.0053833B
00538336 B8 CAC24000 mov eax,记忆力训.0040C2CA
*******************************************************
下面是我找到的注册码信息:
堆栈 ds:=039A61F0, (ASCII "1111111111")
eax=0024A468, (ASCII "988")
**********************************************************
eax=039A6598, (ASCII "266027380")
堆栈 ss:=039A6598, (ASCII "266027380")
**********************************************************
堆栈 ds:=039A61F0, (ASCII "1111111111")
eax=039A6598, (ASCII "187695")
**********************************************************
堆栈 ss:=039A6598, (ASCII "33257")
eax=039A6598, (ASCII "33257")
**********************************************************
堆栈 ss:=039A6518, (ASCII "3325")
ebx=039A64F8
**********************************************************
堆栈 ss:=039A24F8, (ASCII "5320")
ebx=039A6518
**********************************************************
堆栈 ss:=039A6558, (ASCII "18")
ebx=039A24F8
堆栈 ss:=039A6578, (ASCII "7695")
ebx=039A6558
**********************************************************
机器码:9713454651
注册码:988266027380 187695 33257 5320
软件注册了!
其实我对这款软件的兴趣是他的第二个软件!
方法是差不多的,但是要返回下 bp GetPrivateProfileStringA 要找到恰当的返回时机!
还有那个算法CALL是retn 3-4后的第二个CALL。注意分析就行~呵呵~
晕哦!DEMO版~~悲剧
这软件的作者还留一手啊~~~
下面我把第一破解的软件的分析过程上传上来!~
不要怪我挖坟啊.前段时间也是分析这个软件.头都大了.后来直接放弃了.看到有人说论坛有人写过分析.一直没找到.今天偶然又遇到这个软件公司另外一个软件.然后就找楼主的贴了.楼主分析的很细致.感谢分享. 有意义!!! 下面我把这软件的分析结果发一下!我把它们都打包吧!免得浪费大家的CB~
那个分析第二软件的时候,注意那个中间那部分注册码,那部分好像放到后面的。
希望高手给我分析一下那个算法是怎么搞来的?
谢谢大家!~ 这软件有什么用啊??? 纯粹是学习的目的~ 我研究第一个软件的目的是就了破解第二的,本着想一起破解算了。
第二个软件可能有点用吧~~希望大鸟提一下意见~ 带壳调试不错!第一篇主题帖加精鼓励! 这回又学到了好东西!!谢谢楼主分享! 谢谢大家的支持与鼓励~ 我虽然弄清了算法的过程,但是还是弄不清其中的95是什么条件才相乘的? 学习了,看来想学破解还得回去把以前学的汇编在再重学边 本帖最后由 zeknight 于 2010-5-1 19:46 编辑
我晕~~~原来楼主和我关心的是一样的啊!!
我也尝试破解这款软件~~不过在脱壳的时候遇到麻烦~
能详细的描述一下你脱壳的过程吗??