能力值:
( LV6,RANK:90 )
|
-
-
2 楼
|
能力值:
( LV8,RANK:130 )
|
-
-
3 楼
返回地址: 0040366A 函数名称: Ecode_GetProperty(krnl.fnr)
Ecode_GetProperty: 获取窗口控件属性
hWindow=0x52010001
hControl=0x16010002
dwEcodeType=0x00000008 (标题)
Arg4=0xFFFFFFFF
Ecode_GetProperty返回值: 0x00164D68 ("ccbsxhxd")
返回地址: 00403693 函数名称: Ecode_Function_3(krnl.fnr)
Ecode_Function_3: 判断变量是否为数值
dwEcodeType=0x00000001
EcodeVariable=0x00164D68 ("ccbsxhxd")
dwEcodeVarType_2=0x00000000
dwEcodeVarType=0x80000004 (文本型)
Ecode_Function_3返回值: 0x00000000 (FALSE)
004036AF >FADD QWORD PTR DS:[4030CC] //加法
返回地址: 004036D2 函数名称: Ecode_Function_3(krnl.fnr)
Ecode_Function_3: 变量转为字节类型
dwEcodeType=0x00000001
EcodeVariable=0x00000000 (数值)
dwEcodeVarType_2=0x40180000
dwEcodeVarType=0x80000601 (数值型)
Ecode_Function_3返回值: 0x00000006
004096D5 MOV BYTE PTR SS:[EBP-4], AL
返回地址: 004036F1 函数名称: Ecode_Function_3(krnl.fnr)
Ecode_Function_3: 变量转为文本
dwEcodeType=0x00000001
EcodeVariable=0x00000006 (NULL)
dwEcodeVarType_2=0x00000000
dwEcodeVarType=0x80000101 (字节型)
Ecode_Function_3返回值: 0x00164CB0 ("6")
返回地址: 0040370A 函数名称: Ecode_GetProperty(krnl.fnr)
Ecode_GetProperty: 获取窗口控件属性
hWindow=0x52010001
hControl=0x16010003
dwEcodeType=0x00000008 (标题)
Arg4=0xFFFFFFFF
Ecode_GetProperty返回值: 0x00164D68 ("7979797979")
取用户名,判断是否为数值,是为数据+6,不是为0+6,取最后一个字节数值,转为文本与key比较。
程序算法简单。我有点疑惑,下面的代码:
004036B5 >FSTP QWORD PTR SS:[EBP-18]
004036B8 >PUSH 80000601
004036BD >PUSH DWORD PTR SS:[EBP-14]
004036C0 >PUSH DWORD PTR SS:[EBP-18]
4036B5弹出结果到SS:[EBP-18], 4036C0把SS:[EBP-18]数据进栈,为什么我在OD堆栈中没有看到这个结果呢。
我哪里理解错了呢????
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
楼主,有没有破文啊。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
红尘岁月
你是如何发现关键点的?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
12345678
84
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
用户不管什么 只要第一位不是数字
密码6
这个程序太雷了
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
真是高手如云啊!尤其是红尘岁月
说实话我是用易语言编的。写起来很简单,但反汇编有点那个主要是自己水平有限!
我的过程是:用编辑框一的内容加六和编辑框二的内容比较。这个用易语言很好实现。但编辑框只能识别文本型的,所以我用一个局部变量“真码"来做中介的
真码 = 到字节 (到数值 (编辑框1.内容) + 6)
如果 (编辑框2.内容 = 到文本 (真码))
信息框 (“你太棒了!”, 0, )
否则
如果 (编辑框2.内容 ≠ 到文本 (真码))
信息框 (“再试一次!”, 0, )
|
能力值:
( LV9,RANK:460 )
|
-
-
9 楼
很好奇红尘那个自动分析函数怎么弄出来的?
|
能力值:
( LV6,RANK:90 )
|
-
-
10 楼
|
能力值:
( LV9,RANK:460 )
|
-
-
11 楼
感谢CuteSnail兄
试了下,载入crame后一会就停了。能输入用户名,输入不了注册码。点击直接弹出错误对话框
没分析。设置问题?
|
能力值:
( LV8,RANK:130 )
|
-
-
12 楼
易语言的解析功能是我最近加的,那个版本没有。
晚上有空我在工具下载区开个主题,上传一下最新的版本。
|
能力值:
( LV9,RANK:460 )
|
-
-
13 楼
好强大,自己进行工具开发增强。膜拜下。
|
能力值:
( LV8,RANK:130 )
|
-
-
14 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
论坛上第一次发分析帖,显然之前对自己不太自信。但总是要见公婆的。爆破分析如下:
爆破思路如下:
我们先试着运行程序,随便输入注册名和注册码,点击注册,这时弹出信息对话框,提示注册名或注册码错误。好,那我们从这里入手。
在OD底下的命令提示框中输入 bp MessageBoxA,也就是在user32中这个函数上下断点。
F9运行,随便输入注册名和注册码,点击注册,好,OD断下来了。
此时OD是在user32领空,如实Alt+F9,让程序不断返回一直到程序的领空。此时我们发下如下代码:
00409805 /0F84 35000000 je 1.00409840 //代码跳转到409840,也就是弹出对话框后面,可能会误以为是"关键跳"
0040980B |6A 00 push 0
0040980D |6A 00 push 0
0040980F |6A 00 push 0
00409811 |68 01030080 push 80000301
00409816 |6A 00 push 0
00409818 |68 00000000 push 0
0040981D |68 04000080 push 80000004
00409822 |6A 00 push 0
00409824 |68 DF904000 push 1.004090DF
00409829 |68 03000000 push 3
0040982E |BB 00030000 mov ebx,300
00409833 |E8 5C000000 call 1.00409894 //"关键调"用-会弹出错误提示框
00409838 |83C4 28 add esp,28
0040983B |E9 00000000 jmp 1.00409840 //代码跳转到409840,也就是弹出对话框后面
其实上面有个比较可疑的地方就是,无论是弹出"错误信息提示框",还是不弹出,总是会跳到地址409840。说明他们不是"关键跳",
准确的说应该是注册失败后面的一些信息处理吧。好,这个暂时不管。代码如下:
00409840 8BE5 mov esp,ebp
00409842 5D pop ebp
00409843 C3 retn
00409844 C3 retn
00409845 C3 retn
00409846 FC cld
00409847 DBE3 finit
00409849 E8 F6FFFFFF call 1.00409844
好,既然这个不是,那我们继续往上找。发现如下一段代码:
00409751 /0F84 35000000 je 1.0040978C //代码跳转到40978C
00409757 |6A 00 push 0
00409759 |6A 00 push 0
0040975B |6A 00 push 0
0040975D |68 01030080 push 80000301
00409762 |6A 00 push 0
00409764 |68 00000000 push 0
00409769 |68 04000080 push 80000004
0040976E |6A 00 push 0
00409770 |68 D4904000 push 1.004090D4
00409775 |68 03000000 push 3
0040977A |BB 00030000 mov ebx,300
0040977F |E8 10010000 call 1.00409894 //函数调用
00409784 |83C4 28 add esp,28
00409787 |E9 B4000000 jmp 1.00409840 //跳转到409840
上面代码是不是很熟悉,跟上面代码比较可以确定此函数调用应该也是一个对话框呢。
我们在00409751下断,然后让程序别跳转,执行此调用,我们看到自己想看到的结果了。既然注册了,于是
jmp 1.00409840就执行一些首尾工作。
到此我们知道409840处代码是执行一些收尾工作的。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
算法分析其实还不太会,希望某个大虾,有这方面资料提供一些。学习下。
|
能力值:
( LV7,RANK:110 )
|
-
-
17 楼
|
能力值:
( LV8,RANK:130 )
|
-
-
18 楼
|
能力值:
(RANK:2210 )
|
-
-
19 楼
红尘的工具好强
|
能力值:
(RANK:130 )
|
-
-
20 楼
终于搞定了。。。第一次搞易语言的,花了很长时间呀。
004095AA处是算法的核心函数。
00409717处调用004095AA。
|
|
|