首页
社区
课程
招聘
[分享]下断的简单练习
发表于: 2008-8-1 11:20 5352

[分享]下断的简单练习

2008-8-1 11:20
5352
mstwugui:
{
破解注册算法其实只是逆向工程很小的一部分,而且最好不要太过依赖于或是期望某个强大的自动化工具或脚本,在逆向的过程中可以学习到很多技巧或机制,这些才是最值得我们学习的。

熟练的逆向=经验+毅力+信心+灵感+。。。呵呵,当然还需要一部分运气
}

这两个题主要是下断的练习,希望手工解决,写出断法就算成功。因为算法很简单。

练习一:
Crackme-MFC 第 1 版 (初级)      

-----------------------------------------------------------------------
这是一个 MFC 制作的入门 crackme,对破解那些讨厌的 MFC 程序有兴趣的兄弟们可以玩玩   

名字 : Riijj Crackme-MFC 第 1 版
编写语言 : C++
难度 : 初级
讯息 : 没有 antidebug, 没有壳, 没有IAT 修改, 没有花指令
http://bbs.pediy.com/showthread.php?t=27454

练习二:

http://bbs.pediy.com/showthread.php?threadid=12375

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
2
本来想就这两个例子写篇冷门断法的文章,后来觉得太简单,于是就以这形式与破友共同交流。也测试一下对这个话题的感兴趣程度。

如果感兴趣的人多的话,我会考虑写的。
2008-8-2 08:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Dim tmp As Long
Dim num1, num2, num3 As Long

'------------------对用户名操作

Dim shuzu(1 To 10) As Long

shuzu(1) = &H4B
shuzu(2) = &H45
shuzu(3) = &H59
shuzu(4) = &H2D
shuzu(5) = &H4B
shuzu(6) = &H41
shuzu(7) = &H4E
shuzu(8) = &H4F
shuzu(9) = &H4E

For i = 1 To Len(Text1.Text)
    tmp = Asc(Mid(Text1.Text, i, 1))
    num2 = num2 + tmp
Next i

Dim tmp1, tmp2 As Long
For i = 1 To 9
    tmp = shuzu(i) * num2
    tmp = tmp Mod &H1A
   
    tmp = tmp + &H61
    tmp = tmp Xor &HAA
   
    num3 = num3 + tmp
Next i

'-------------------对密码操作
For i = 1 To 9
    tmp = Asc(Mid(Text2.Text, i, 1))
    tmp = tmp Xor 170
    num1 = num1 + tmp
Next i

if num1=num3 then msgbox "正确"
2008-8-2 16:42
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
4
算法我粗看了一下,没详细分析,抱歉。这两个例子是我研究
高效率的断法的副产品,看能不能在.NET中适用。尝试了一些
少见的断法,但似乎不适用于.NET.

今天刚看到一篇.NET的好文,精力暂时顾不上:
【原创】看雪读书月之初夜—doNet程序的接触      

--------------------------------------------------------------------------------
标 题: 【原创】看雪读书月之初夜—doNet程序的接触
作 者: cater
时 间: 2008-08-02,18:38
链 接: http://bbs.pediy.com/showthread.php?t=69869

我简单说下我的断法(我认为高效率的):
练习一:
方法1.消息断点+内存访问.
方法2.MFCSPY.
【原创】mfc spy,把mfc程序的内部函数揪出来      

--------------------------------------------------------------------------------
标 题: 【原创】mfc spy,把mfc程序的内部函数揪出来
作 者: goldenegg
时 间: 2005-01-14,00:05
链 接: http://bbs.pediy.com/showthread.php?t=9805

练习二:
很滑稽,作者精心设计的反调试形同虚设,用消息断点就轻易断下,根本感受不到反调试.
但作者对反调试的破文解释很详细,值得一看.

有几种少见的断法,不实用:
{
galihoo

初级会员

资 料:
注册日期: Mar 2006
帖子: 9
精华: 0
声望: 10   100  2006-06-27, 17:17      

--------------------------------------------------------------------------------
riijj_mfccm1_r2  运气爆破成功!!

先用win32asm查找dialog
找到两个,应该其中一个就是弹出成功的对话框

0040340F和004036C8

第一个肯定是本身的对话框

那么第二个就是了哦

IDA分析, 发现被004012B8调用
看看这一段

.text:0040129A                 mov     dl, [eax+esi]
.text:0040129D                 mov     bl, [ecx]
.text:0040129F                 cmp     dl, bl
.text:004012A1                 jnz     loc_4013DB
.text:004012A7                 inc     eax
.text:004012A8                 add     ecx, 4
.text:004012AB                 cmp     eax, 10h
.text:004012AE                 jl      short loc_40129A
.text:004012B0                 push    edi
.text:004012B1                 lea     ecx, [esp+0F0h+var_6C]
.text:004012B8                 call    sub_4036C0

猜测  .text:004012A1                 jnz     loc_4013DB
这个可能就是跳到不知名的位置去了..哈..测试,改成jz  loc_4013DB
爆破成功!!
运气

我不会分析算法,希望得到高手指点

leyhom

初级会员

资 料:
注册日期: Jul 2006
帖子: 10
精华: 0
声望: 10   105  2006-08-16, 17:26      

--------------------------------------------------------------------------------
riijj_mfccm1_r2 的破解思路

首先利用“黑客资源”查看源程序,发现获得成功注册后会出来一对话框,记住它的窗口号是103,换成16进制就是67,然后在OD里面加载riijj_mfccm1_r2,搜索push 67,意思就是找到它注册成功的提示,它不是注册失败没有提示吗?我们就从成功入手。
004036C8:push 67  //就是这个窗口
我们往上看,上面肯定有压入注册名的地方,经过反复测试,发现在00403642处,在此下断,然后就一步步跟吧,经过好大一步,发现它是在0040129F处开始做试验码的比较,算法让我跟了半天,一看就头大,也没有去继续跟

注册名:leyhom
注册码:PCGGEFVQPQSLNUMQ

chinglq

普通会员

资 料:
注册日期: Aug 2007
帖子: 187
精华: 0
声望: 16   149  2007-10-25, 11:04      

--------------------------------------------------------------------------------
97楼的Riijj Crackme-MFC 第 1 版
关键是下断点,输入用户名,假码,点“注册”没反应。只有输入正确,才出现成功对话框。
字符串无可用的、API也很难断,后来用_operator new断下,查了下,是明码比较,用户名是固定的。结果是:
    name: childtoy
    code: ULBKLSUUTKTUKSNG
算法分析还不大会,但总算还能追码,也算一大进步!
}
2008-8-2 20:55
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
5
你这应该是练习二了.

为什么要逆运算呢?不懂...

(Text1.Text)得出num3,你写得很对.

-------------------对密码操作下面
试试对(Text2.Text)用穷举法,这是对密码表的常用方法.

你水平比我的好,向你学习.
2008-8-2 21:40
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
6
Pr0Zel 。。。键盘按得像弹琴一样优美的男人。。。
2008-8-2 22:51
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
7
卿本佳人
缘何笨熊?

For i = 1 To 9
    tmp = Asc(Mid(Text2.Text, i, 1))
    tmp = tmp Xor 170
    num1 = num1 + tmp
Next i

if num1=num3 then msgbox "正确"

学习.NET间隙简单想了一下:
可以average=num3/9为思路进行逆运算

average=num3÷9

For i = 1 To 4
    jieguo(i)=Randomize(100)
    jieguo(i+5)=average*2-jieguo(i)
Next i
jieguo(5)=num3-average*8

For i = 1 To 9
    jieguo(i)=jieguo(i)  xor 170
Next i

Text2.Text=jieguo(1 to 9)
2008-8-3 00:47
0
游客
登录 | 注册 方可回帖
返回
//