好友
阅读权限20
听众
最后登录1970-1-1
|
大家好,我是小爱逆天,每天天天习惯性打开论坛登录吾爱账号,已经成为了我的一个习惯,每天打开别人的帖子,在别人的帖子里面与跟帖里面学到比较多的东西,呵呵 我菜鸟就是一个菜鸟,每次偷偷在别人帖子里面看到的比如说什么断点啊,就悄悄用记事本保存起来,自己下次遇见了好用,哈哈! 下面进入正题,用的软件是 <里诺仓库管理软件(单机版) 3.96>这个软件相信大家所熟悉遇见的爆破版偏多,今天我就是要带领大家,把这个软件算法一步步写出来,并且用编程软件写出注册机,相互学习,才能进步,感谢吾爱给我们菜鸟一个这样的平台 !打开软件界面, 机器码 : WD-WCAV2W004030 输入假码 0123456789 重启验证不解释,大家都懂 ,直接进入关键点 开始了
006D7B23 . E8 F05FD7FF call Depot.0044DB18 ; 取假码CALL
006D7B28 . 8B55 C4 mov edx,dword ptr ss:[ebp-0x3C] ; 将假码放入EDX
006D7B2B . A1 3C3F7000 mov eax,dword ptr ds:[0x703F3C]
006D7B30 . 8B00 mov eax,dword ptr ds:[eax]
006D7B32 . 05 80060000 add eax,0x680
006D7B37 . E8 38CFD2FF call Depot.00404A74
006D7B3C . 33C0 xor eax,eax // 程序暂停在 006D7B30 这个位置
////////////*********************************************************↓↓以下是堆栈窗口信息
0012F930 0012F98C
0012F934 0012F994 指向下一个 SEH 记录的指针
0012F938 006D7CC7 SE处理程序
0012F93C 0012F98C
0012F940 006D68AC Depot.006D68AC
0012F944 00FE1804
0012F948 0044B2C4 Depot.0044B2C4
0012F94C 00000000
0012F950 0103B8C0 ASCII "0123456789"///堆栈窗口
0012F954 00000000
0012F958 02F52064 ASCII " WD-WCAV2W004030"
0012F95C 01050B80 ASCII "WD-WCAV2W004030"
0012F960 006D7D6C ASCII "Software\zy\Depot"//注册表信息保存着机器码,跟假码的位置
////////////////////*****************************************************↑以上是堆栈窗口信息
以上都是废话直接单步跟踪!!!
006D7BC0 . 8D4D C0 lea ecx,dword ptr ss:[ebp-0x40]
006D7BC3 . A1 3C3F7000 mov eax,dword ptr ds:[0x703F3C]
006D7BC8 . 8B00 mov eax,dword ptr ds:[eax]
006D7BCA . 8B90 7C060000 mov edx,dword ptr ds:[eax+0x67C]
006D7BD0 . A1 143C7000 mov eax,dword ptr ds:[0x703C14]
006D7BD5 . 8B00 mov eax,dword ptr ds:[eax]
006D7BD7 . E8 10E3FFFF call Depot.006D5EEC ; 软件算法CALL
006D7BDC . 8B55 C0 mov edx,dword ptr ss:[ebp-0x40]
006D7BDF . A1 3C3F7000 mov eax,dword ptr ds:[0x703F3C]
下面直接进入到算法CALL F7进入啦
//////////////////////////////////////////////////////********************这段代码是将机器码全部转换为十六进制码,连接起来,呵呵我的理解就是这样了
006D5F31 |. /7E 26 jle XDepot.006D5F59
006D5F33 |. |BB 01000000 mov ebx,0x1 ; 将机器码的逐个讲字母转换成十六进制代码i
006D5F38 |> |8D4D EC /lea ecx,[local.5]
006D5F3B |. |8B45 FC |mov eax,[local.1] ; 讲机器码送入EAX
006D5F3E |. |0FB64418 FF |movzx eax,byte ptr ds:[eax+ebx-0x1]
006D5F43 |. |33D2 |xor edx,edx
006D5F45 |. |E8 4240D3FF |call Depot.00409F8C
006D5F4A |. |8B55 EC |mov edx,[local.5]
006D5F4D |. |8D45 F8 |lea eax,[local.2]
006D5F50 |. |E8 A3EDD2FF |call Depot.00404CF8
006D5F55 |. |43 |inc ebx ; 计数器+2
006D5F56 |. |4E |dec esi
006D5F57 |.^|75 DF \jnz XDepot.006D5F38 ; 整体就是将机器码转换为十六进制码
一大串机器码转换为 十六进制代码 57442D574341563257303034303330 ///我对于这个不是很理解,应该怎么叫 就是把机器码一个个HEX 转换为16进制链接起来得到
57442D574341563257303034303330
eax=00000002
跳转来自 006D5F31
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////*********************************
继续跟进.............................................................................................................
006D5F5C |. E8 8FEDD2FF call Depot.00404CF0
006D5F61 |. 8BF0 mov esi,eax ; 取出一大串16进制 后面的一个字节数据30 保存在EDX
006D5F63 |. 85F6 test esi,esi
006D5FA1 |. 8B45 F4 mov eax,[local.3]
006D5FA4 |. E8 A7EFD2FF call Depot.00404F50//这里将前面机器码转换的字符串位置倒过来就是 其实在前面算法里面就是 033303430303752365143475D24475
006D5FA9 |. 8D45 F41 lea eax,[local.3]
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
006D5FB2 |. BA 05000000 mov edx,0x5
006D5FB7 |. 8B45 F4 mov eax,[local.3]
006D5FBA |. E8 91EFD2FF call Depot.00404F50 ; 其实这里执行了可以通过堆栈窗口看出 是取出倒过来的 0333 0343
006D5FBF |. 8B45 F8 mov eax,[local.2]
006D5FC2 |. E8 29EDD2FF call Depot.00404CF0
///////////////////////////这里堆栈窗口****************************************************************
0012F918 02F52088 ASCII "30"
0012F91C 00000000
0012F920 02F52110 ASCII "0343"
0012F924 01047808 ASCII "0333"
0012F928 01050B80 ASCII "WD-WCAV2W004030"
0012F92C /0012F98C
//////////////////*/////////这是堆栈窗口*****************************************************************
继续向前进
006D6037 |> \8D45 F0 lea eax,[local.4]
006D603A |. BA C4606D00 mov edx,Depot.006D60C4 ; DEPw245d54k
006D603F |. E8 74EAD2FF call Depot.00404AB8 ; 装入一个固定字符串字符串
006D6044 |. 8D45 DC lea eax,[local.9]
006D6047 |. 50 push eax
006D6048 |. B9 04000000 mov ecx,0x4
006D604D |. BA 01000000 mov edx,0x1
006D6052 |. 8B45 F0 mov eax,[local.4]
/////////////////////////以上就是将一个 固定字符串 DEPw245d54k 装入内存中,说白就是一个固定字符串
/////////////////////////前进,前进!!!!!!!!!!!!!!!!!!!!!!!!
006D606E |. BA 05000000 mov edx,0x5
006D6073 |. 8B45 F0 mov eax,[local.4] ; 讲固定字符串 DEPw245d54k 放入EAX
006D6076 |. E8 D5EED2FF call Depot.00404F50
006D607B |. FF75 D8 push [local.10] ; 取出前面4位DEPW
006D607E |. 68 D8606D00 push Depot.006D60D8 ; -
006D6083 |. FF75 F4 push [local.3]
006D6086 |. 8BC7 mov eax,edi
006D6088 |. BA 06000000 mov edx,0x6
/////将固定字符串 DEPw245d54k 前面4位 DEPW取出来 放入EAX
/////////////////////////////////////////////////////////////////////////////////**********************
不是关键位置一路飞过了
006D7BD5 . 8B00 mov eax,dword ptr ds:[eax]
006D7BD7 . E8 10E3FFFF call Depot.006D5EEC ; 软件算法CALL
006D7BDC . 8B55 C0 mov edx,dword ptr ss:[ebp-0x40]
006D7BDF . A1 3C3F7000 mov eax,dword ptr ds:[0x703F3C]
006D7BE4 . 8B00 mov eax,dword ptr ds:[eax]
006D7BE6 . 8B80 80060000 mov eax,dword ptr ds:[eax+0x680]
006D7BEC . E8 4BD2D2FF call Depot.00404E3C ; 假码进行比较 进入call 去看看啦
006D7BF1 . 75 7D jnz XDepot.006D7C70
一路运行到这里,观看寄存器
EAX 0103B8C0 ASCII "0123456789"
EDX 02F5214C ASCII "DEPw-0333245d5-0343"
EAX = 假码 那EDX 我们暂且 不知道他是什么继续,单步
//////////////////运行....................
运行到这个位置 这里有个cmp 比较指令
00404E43 39D0 cmp eax,edx ; 注册码进行明码比较 其实根据调试得知,这个比较指令
00404E45 0F84 8F000000 je Depot.00404EDA/////这个比较修改jpm 就跳过注册,
00404E4B 85F6 test esi,esi
00404E4D 74 68 je XDepot.00404EB7
00404E4F 85FF test edi,edi
00404E51 |. 74 6B je XDepot.00404EBE
其实这里分析就不难得出保存在寄存器 EAX 跟EDX进行比较,就可以成功进入,那就说明EDX是保存的注册码,大家要是仔细看过我的前面分析,就不难得出
这个 DEPw-0333245d5-0343 在程序里面是怎么得出的吧。
下面进行总结
DEPW 是根据字符串 DEPw245d54k前面4位得出
0333 是根据前面机器码转换为16进制倒置过来的 前面4位
2455d5 就是固定字符串的DEPw245d54k 5为到10位得出
0343 跟0333是一样的 机器码倒置提取 2到4字节的的数据得出
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
有了以上资料,我们是不是就可以开始写注册机了呢,哈哈,我呢,比较熟悉按键精灵 就用按键精灵来完成这一系列步骤吧,写出属于我们的第一个注册机
注册机见文件下载------------------------------------------------------
作者总结,--------分析这个算法纯属运气,各位大虾不要见笑哈
运行在于以下几点
1 我在跟踪程序的时候,注意到每一个字符串的组成,寄存器 窗口,堆栈窗口,注释窗口 数据窗口都得注意啊 可真的是眼观四方 耳听八方 ,嘻嘻嘻
2 确实我在汇编方面下的功夫,我个人觉得还是比较大,因为我刚开始学习汇编的时候,别人吃饭的时候,我就会尽快到我工作的地方,拿起本子,拿起笔把
晚上看的代码,完完全全写出来,回家了开电脑 首先是研究汇编, 什么mov 啊 CALL 啊 pop push 这些基本都是啃了一遍又一遍,
3 有时候我们在爆破软件的时候,一定不要只顾着爆破软件,也要想想分析算法出来,看见注册码,跟我分析出来那些字符串那么的相似,肯定要想想他们怎么组成的 。
是不是注册码
4 努力学习,是我的宗旨,所谓活到老学到老,虽然我还年纪不是很大 1993年出生,时间一晃已经20了尼玛耶,感叹时间过得太快
5 呵呵 话说回来这个算法确实挺简单,不是很难,我为什么说他不是很难呢 ,因为连我都分析出来了,绝对难不到哪里去对吧
6 感谢吾爱,感谢按键精灵,感谢所有曾经给予我无私帮助的人,无数热心网友,
7 哎呀时间一看 04:03:55 已经4点钟了,还在这里花几个小时写一个帖子,大家看到帖子了,一定要顶一顶啊 加上学汇编的时间不计其数了 哎....还得努力学习
8 因为按键精灵编写,有点鸡勒 你们输入机器码的时候 一定要点击启动 或者F9启动后,在点击算码,这样算出来的才是正确的!!谢谢大家
|
-
-
-
算法源码.txt
858 Bytes, 下载次数: 31, 下载积分: 吾爱币 -1 CB
免费评分
-
查看全部评分
|