Liquor 发表于 2013-8-20 20:57

某软件算法分析

【文章标题】: 某软件算法分析
【文章作者】: Crack_Qs
【作者邮箱】: qs#ff0000.cc(#换@)
【软件名称】: 《十万个为什么》
【下载地址】: 自己搜索下载
【加壳方式】: aspack
【保护方式】: 本地验证
【使用工具】: OllyDBG
【操作平台】: Window xp
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
——————————————————————————–
【详细过程】
脱壳我就不写了,aspack脱壳很简单。
——————————————–
0047EA88   .55            push ebp                                 ;按钮事件开始
0047EA89   .8BEC          mov ebp,esp
0047EA8B   .B9 08000000   mov ecx,0×8
0047EA90   >6A 00         push 0×0
0047EA92   .6A 00         push 0×0
0047EA94   .49            dec ecx
0047EA95   .^ 75 F9         jnz Xdumped_.0047EA90
0047EAC3   .E8 E4A3F8FF   call dumped_.00408EAC
0047EAC8   .837D F4 00    cmp dword ptr ss:,0×0
0047EACC   .75 19         jnz Xdumped_.0047EAE7
0047EACE   .BA 84ED4700   mov edx,dumped_.0047ED84               ;提示
0047EAD3   .B8 8CED4700   mov eax,dumped_.0047ED8C               ;    姓名不能为空!
0047EAD8   .B9 30000000   mov ecx,0×30
0047EADD   .E8 E256FFFF   call dumped_.004741C4
0047EB02   .E8 A5A3F8FF   call dumped_.00408EAC
0047EB07   .8B45 E8       mov eax,dword ptr ss:          ;取假码“12345678”放入EAX
0047EB0A   .B9 0C000000   mov ecx,0xC                              ;ECX放入“0xC” 即注册码标准长度为12位
0047EB0F   .BA 01000000   mov edx,0×1
0047EB3D   .8B45 D8       mov eax,dword ptr ss:          ;读取用户名
0047EB40   .8D4D DC       lea ecx,dword ptr ss:
0047EB43   .BA A8ED4700   mov edx,dumped_.0047EDA8               ;读取字串“十万个为什么”
0047EB48   .E8 3F57FFFF   call dumped_.0047428C                  ;算法CALL
进算法CALL看一下
0047428C/$55            push ebp                                 ;算法CALL开始
0047428D|.8BEC          mov ebp,esp
0047428F|.6A 00         push 0×0
00474291|.6A 00         push 0×0
00474293|.6A 00         push 0×0
004742BB|.E8 EC4BF9FF   call dumped_.00408EAC                  ;用户名是否存在
004742C0|.837D F0 00    cmp ,0×0
004742C4|.75 0F         jnz Xdumped_.004742D5
004742C6|.B8 28444700   mov eax,dumped_.00474428               ;Input String Can’t be Empty!
004742CB|.E8 38B1FDFF   call dumped_.0044F408
004742D8|.50            push eax
004742D9|.B9 06000000   mov ecx,0×6                              ;取用户名长度6位
004742DE|.BA 01000000   mov edx,0×1
0047433C|.8B55 E8       mov edx,                        ;取用户名
0047433F|.8D45 F4       lea eax,
00474342|.8B4D F4       mov ecx,                        ;取“十万个为什么”的前三个字节
00474345|.E8 C2FBF8FF   call dumped_.00403F0C
0047434A|.8D55 FC       lea edx,
0047434D|.B8 0C000000   mov eax,0xC                              ;增加到12位
00474352|.E8 F5FEFFFF   call dumped_.0047424C
00474357|.BB 01000000   mov ebx,0×1
0047435C|>8D45 FC       /lea eax,
0047435F|.E8 2CFDF8FF   |call dumped_.00404090
00474364|.8BF3          |mov esi,ebx                           ;用字串空格填充
00474366|.03F6          |add esi,esi
00474368|.8B55 F8       |mov edx,
0047436B|.8A541A FF   |mov dl,byte ptr ds:
0047436F|.885430 FE   |mov byte ptr ds:,dl
00474373|.8D45 FC       |lea eax,
00474376|.E8 15FDF8FF   |call dumped_.00404090
0047437B|.8B55 F4       |mov edx,
0047437E|.8A541A FF   |mov dl,byte ptr ds:
00474382|.885430 FF   |mov byte ptr ds:,dl
00474386|.43            |inc ebx
00474387|.83FB 07       |cmp ebx,0×7                           ;对用户名长度进行处理,不足6位补空格 多余6位减少
0047438A|.^ 75 D0         \jnz Xdumped_.0047435C                   ;该段计算就是把用户名和“十万个”字符,进行错位连接处理
计算后为 43 CA 72 AE 61 CD 63 F2 6B B8 5F F6
Crack_   43 72 61 63 6B 5F
“十万个” CA AE CD F2 B8 F6
004743A9|> /8B45 FC       /mov eax,
004743AC|. |8A4418 FF   |mov al,byte ptr ds:      ;取第一个字符“C”值为43
004743B0|. |34 BB         |xor al,0xBB                           ;和0xBB异或
004743B2|. |25 FF000000   |and eax,0xFF                            ;再和FF运算
004743B7|. |8D55 E4       |lea edx,
004743BA|. |E8 6D4CF9FF   |call dumped_.0040902C                   ;运算??xor187and255
004743BF|. |8B45 E4       |mov eax,                     ;得到结果248 之后取结果第一位
004743C2|. |FF30          |push dword ptr ds:               ;以此类推
004743C4|. |8BC7          |mov eax,edi
004743C6|. |E8 C5FCF8FF   |call dumped_.00404090
004743CB|. |5A            |pop edx
004743CC|. |885418 FF   |mov byte ptr ds:,dl
004743D0|. |43            |inc ebx
004743D1|. |4E            |dec esi
004743D2|.^\75 D5         \jnz Xdumped_.004743A9
004743D4|>E8 6FE6F8FF   call dumped_.00402A48                  ;得到真注册码
EAX 00C46D3C ASCII ”212221272327″
———————————————————————————————————-
算法过程记录:
1.用户名限制为6位,多舍少补。
2.导入一个字串“十万个”
3.之后进行错位排列用户名与字串(如:121212)
4.值转换十进制进行计算(??xor187and255),结果取第一位,全部处理完后,第一位取的值即为真注册码。
——————————————————————————–
【版权声明】: 本文原创于Crack_Qs@红黑联盟专家堂, 转载请注明作者并保持文章的完整, 谢谢!
2012年11月30日 12:54:29

1354669803 发表于 2013-8-20 21:00

Qs怎么今天这么有空奔放呢

Liquor 发表于 2013-8-20 21:01

1354669803 发表于 2013-8-20 21:00 static/image/common/back.gif
Qs怎么今天这么有空奔放呢

准备去管理团队看看雨妹

LoongKing 发表于 2013-8-20 21:12

QS爹真威猛!

Liquor 发表于 2013-8-20 21:14

E_eYYF 发表于 2013-8-20 21:12 static/image/common/back.gif
QS爹真威猛!

你是?

LoongKing 发表于 2013-8-20 21:37

Liquor 发表于 2013-8-20 21:14 static/image/common/back.gif
你是?

小菜鸟一只,我的师叔是无nai..........

你若安好 发表于 2013-8-20 21:38

QS大好厉害啊。。先回复,再品味!

Liquor 发表于 2013-8-20 21:48

E_eYYF 发表于 2013-8-20 21:37 static/image/common/back.gif
小菜鸟一只,我的师叔是无nai..........

我了个艹,我貌似对这句话有印象,记得谁一直喊无聊时师叔。不会。。。。是你吧

马斯维尔 发表于 2013-8-20 21:51

QS牛今天真是大放送啊。谢谢了

LoongKing 发表于 2013-8-20 22:06

Liquor 发表于 2013-8-20 21:48 static/image/common/back.gif
我了个艹,我貌似对这句话有印象,记得谁一直喊无聊时师叔。不会。。。。是你吧

没错,正是小菜鸟,求QS爹带!湿书已死......
页: [1] 2
查看完整版本: 某软件算法分析