吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5454|回复: 12
收起左侧

[原创] 一个简单crackme的算法分析2013.06.18

[复制链接]
Ericky 发表于 2013-6-18 11:26
本帖最后由 PoJie_小雨 于 2014-9-14 21:24 编辑

【文章标题】:一个简单crackme的算法分析  2013.06.18
【文章作者】: xiaoyu
【作者邮箱】:
【下载地址】: http://pan.baidu.com/share/link?shareid=710222177&uk=892352529
【保护方式】: none
【使用工具】: PEiD,OllyDbg
【作者声明】: 主要记录自己的学习过程!欢迎交流学习
--------------------------------------------------------------------------------
【详细过程】
1.查壳
我们发现并没有壳
程序由Microsoft Visual C# v7.0 / Basic .NET编写:
1.png
2.使用K-analysis插件查看算法
发现为BASE64和MD5算法:
2.png
3.算法分析:
我们用OD载入:
3.png
不难发现,我们看见了熟悉的函数:00401027  |.  E8 D4090000   call <jmp.&user32.DialogBoxParamA>    ; \DialogBoxParamA
先让程序跑起来
发现输入name and serial 之后:
“check”按钮点击,并未有任何反应
4.png
那该怎么办?
这里 我们可以试试:GetDlgItemTextA这个函数
bp GetDlgItemTextA
我们发现 程序被断下来了:
我们在段首下断点:
5.png
让程序跑起来,发现断下来了
F8单步走:(发现这两条是取了用户名)
00401124 |. E8 E3080000 call <jmp.&user32.GetDlgItemTextA> ; \GetDlgItemTextA
00401129 |. 68 A2324000 push kiToKGNm.004032A2 ; 取用户名
我们继续F8分析:
00401134  |.  E8 67070000   call kiToKGNm.004018A0                ;  算法CALL
我们进入算法CALL分析:
6.png
可以看到他是以ebp来几次的 每次以3个字节来计算:
把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
具体算法请大家百度 ,我不细说了
注意存放地址:004032A2
00401139  |.  68 A2324000   push kiToKGNm.004032A2                ; /StringToAdd = "eGlhb3l1"
0040113E  |.  68 D4324000   push kiToKGNm.004032D4                ; |ConcatString = ""
00401143  |.  E8 A0080000   call <jmp.&kernel32.lstrcatA>         ; \lstrcatA
00401148  |.  68 3E324000   push kiToKGNm.0040323E                ; /StringToAdd = "NTE0MDA4MjhOVEUwTURBNE=="
0040114D  |.  68 D4324000   push kiToKGNm.004032D4                ; |ConcatString = ""
00401152  |.  E8 91080000   call <jmp.&kernel32.lstrcatA>         ; \lstrcatA
发现name被压栈
调用了2次字符串相加的函数:lstrcatA
00401157  |.  68 D4324000   push kiToKGNm.004032D4                ; /String = "eGlhb3l1NTE0MDA4MjhOVEUwTURBNE==";将相加结果 存入栈中
继续F8:
0040115C  |.  E8 93080000   call <jmp.&kernel32.lstrlenA>         ; \lstrlenA
这里的CALL 实际上是一个判断“eGlhb3l1NTE0MDA4MjhOVEUwTURBNE==”长度的子程序
长度存入了EAX
00401161  |.  A3 A0314000   mov dword ptr ds:[4031A0],eax;长度保存
继续F8:
00401166  |.  E8 3D060000   call kiToKGNm.004017A8                ;  MD5算法CALL
进入CALL后 我们看见了:
MD5算法结果是分成4段的:
7.png
0040118D  |.  53            push ebx                              ; /<%X> = F59D4EF1
很明显,这里其实是将4段MD5值相加  和值入栈
下面来到关键句:
004011A0  |.  C605 3C334000>mov     byte ptr [40333C], 2D
2D其实就是“-”字符的ASCII码值
byte ptr [40333C], 和值的“第五位”
所以上面的意思就是将和值的第五位字母用符号“-”替换
这个就是验证码了
然后2者比较:
8.png
算法就分析得差不多了

MD5的算法CALL 中 有变化,并不是直接算的MD5值的4段相加
而是稍微有变化
如有兴趣,请读者自己研究
  最后附上注册机:
9.jpg







kiToKGNmeAGAiN注册机.zip

573.75 KB, 下载次数: 14, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 2热心值 +2 收起 理由
淡然出尘 + 1 已答复!
Shark恒 + 1 期待小雨更多作品!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

jingdor 发表于 2013-6-18 11:30
学习学习,lz好样的!
 楼主| Ericky 发表于 2013-6-18 11:34
jingdor 发表于 2013-6-18 11:30
学习学习,lz好样的!

貌似都不敢兴趣算法。。
ljtnine 发表于 2013-6-18 11:37
 楼主| Ericky 发表于 2013-6-18 11:38
ljtnine 发表于 2013-6-18 11:37
感谢分享,研究一下

好的 加油
淡然出尘 发表于 2013-6-18 12:05
楼主狠犀利啊..貌似.net的文件很难破的
 楼主| Ericky 发表于 2013-6-18 12:06
淡然出尘 发表于 2013-6-18 12:05
楼主狠犀利啊..貌似.net的文件很难破的

只是大家接触得少。。而且我这个也是比较容易的了·
淡然出尘 发表于 2013-6-18 12:10
已加你QQ了 今后多多交流哈
我也是大三的 但是专业苦逼..
 楼主| Ericky 发表于 2013-6-18 13:15 来自手机
淡然出尘 发表于 2013-6-18 12:10
已加你QQ了 今后多多交流哈
我也是大三的 但是专业苦逼..

你怎么有我qq。。。你什么专业。。
小雨细无声 发表于 2013-6-18 20:17
晕,今天的热心和爱币都贡献出去了,感谢大神!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-5 03:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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