好友
阅读权限35
听众
最后登录1970-1-1
|
小菜鸟一枚
发表于 2019-9-22 22:20
本帖最后由 小菜鸟一枚 于 2019-9-23 20:17 编辑
一直对黑客充满了好奇,觉得黑客神秘,强大,无所不能,来论坛一年多了,天天看各位大佬发帖,自己只能做一个伸手党。也看了官方的入门视频教程,奈何自己基础太差,看不懂。自我反思之下,决定从今天(2019年6月17日)开始定下心来,从简单的基础教程开始学习,希望能从照抄照搬,到能独立分析,能独立破解。
立帖为证!--------记录学习的点点滴滴
自写的简单的C语言字符串异或加密分析
程序介绍:
输入正确的16位字符串,txt文件就会保存我们输入的字符串。
然后就可以用这个字符串去打开我的源码压缩包!
[Asm] 纯文本查看 复制代码 1.自己写的程序,没壳,所以不用查壳,直接将程序丢进OD,停在了
004014C7 > $ E8 7D040000 call demo02.__security_init_cookienFilte>
004014CC .^ E9 B3FDFFFF jmp demo02.__tmainCRTStartupexceptionFil>
004014D1 > > 8BFF mov edi,edi
004014D3 /. 55 push ebp
首先右键-》中文搜索引擎-》智能搜索
中文搜索引擎
地址 反汇编 文本字符串
[Asm] 纯文本查看 复制代码 00401010 mov eax,dword ptr ds:[0x402104] 52pojie.txt
00401015 mov ecx,dword ptr ds:[0x402108] jie.txt
0040101B mov edx,dword ptr ds:[0x40210C] txt
0040102C mov eax,dword ptr ds:[0x402110] BX42ET3TK32VD6J1
00401034 mov eax,dword ptr ds:[0x40211C] (Initial CPU selection)
00401034 mov eax,dword ptr ds:[0x40211C] D6J1
0040103C mov ecx,dword ptr ds:[0x402114] ET3TK32VD6J1
00401045 mov edx,dword ptr ds:[0x402118] K32VD6J1
0040105C mov edx,dword ptr ds:[0x402124] reading GO!!!
00401069 mov eax,dword ptr ds:[0x402128] ing GO!!!
00401071 mov ecx,dword ptr ds:[0x40212C] GO!!!
0040107A mov dx,word ptr ds:[0x402130] !
00401086 push demo02.00402134 请输入长度为16的字符串:\n
004010A3 push demo02.00402150 %s
00401105 push demo02.00402168 r
004011D1 push demo02.0040216C w
004011F8 push demo02.0040216C w
00401203 push demo02.00402154 o%%%|g`"=8;7|1<o
0040141F mov eax,dword ptr ds:[0x40003C] è
004015A7 push offset demo02.GS_ExceptionPointerss 80@
0040190A push demo02.__security_check_cookieionFi ;\r
试了试BX42ET3TK32VD6J1,发现密码不对,按照程序流程我们知道输入字符串,然后比较后将
我们输入的字符串写入到52pojie.txt文件,那么我们在00401086这里回车跟进去
[Asm] 纯文本查看 复制代码 00401086 |. 68 34214000 push demo02.00402134 ; /请输入长度为16的字符串:\n
0040108B |. 894D DC mov [local.9],ecx ; |
0040108E |. 66:8955 E0 mov word ptr ss:[ebp-0x20],dx ; |
00401092 |. 8945 E2 mov dword ptr ss:[ebp-0x1E],eax ; |
00401095 |. 66:8945 E6 mov word ptr ss:[ebp-0x1A],ax ; |
00401099 |. FF15 B8204000 call dword ptr ds:[<&MSVCR100.printf>] ; \printf
0040109F |. 8D45 E8 lea eax,[local.6]
004010A2 |. 50 push eax
004010A3 |. 68 50214000 push demo02.00402150 ; /%s
004010A8 |. FF15 B0204000 call dword ptr ds:[<&MSVCR100.scanf>] ; \scanf
然后这里提示我们输入16位字符串,我们输入1234567891234567,继续向下单步,
看信息窗口
堆栈地址=0018FF2C, (ASCII "1234567891234567")
eax=0018FF3D
demo02.wmainerrinitgeBasexceptionFiltertion+0AE
0018FF2C这个地址存的是我们刚刚输入的地址,在数据窗口中跟随一下这个数据地址!
然后我们继续向下单步,我们单步到004010EA这里,在观察数据窗口
[Asm] 纯文本查看 复制代码 004010DC |. 8D6424 00 lea esp,dword ptr ss:[esp]
004010E0 |> 80740D E8 52 /xor byte ptr ss:[ebp+ecx-0x18],0x52
004010E5 |. 41 |inc ecx
004010E6 |. 3BC8 |cmp ecx,eax
004010E8 |.^ 7C F6 \jl short demo02.004010E0
004010EA |> 8D45 E8 lea eax,[local.6]
很明显发现数据变成了
0018FF2C 63 60 61 66 67 64 65 6A 6B 63 60 61 66 67 64 65 c`afgdejkc`afgde
2.既然数据改变了,那么看看上面那断代码,很明显是对字符串进行了xor 0x52这个操作,
再来看看寄存器窗口:
EAX 00000010
ECX 00000010
EDX 0018FF2D ASCII "`afgdejkc`afgde"
EBX 00000000
ESP 0018FF04 ASCII "52pojie.txt"
EBP 0018FF44
ESI 00000001
EDI 00403374 offset demo02.__native_startup_lockonement
EIP 004010EA demo02.004010EA
每加密一个字符,ecx+1,直到等于16(0x10等于十进制的16),这几个汇编指令百度就知道了
xor 异或52
inc +1指令
cmp 比较两个数(ecx,eax)
jl 小于就跳转(不小于就跳出循环向下执行)
然后我们继续向下单步走
[Asm] 纯文本查看 复制代码 00401160 8D55 D4 lea edx,dword ptr ss:[ebp-0x2C]
00401163 8D4D E8 lea ecx,dword ptr ss:[ebp-0x18]
00401166 8A01 mov al,byte ptr ds:[ecx]
00401168 3A02 cmp al,byte ptr ds:[edx]
0040116A 75 1A jnz short demo02.00401186
0040116C 84C0 test al,al
0040116E 74 12 je short demo02.00401182
00401170 8A41 01 mov al,byte ptr ds:[ecx+0x1]
00401173 3A42 01 cmp al,byte ptr ds:[edx+0x1]
00401176 75 0E jnz short demo02.00401186
00401178 83C1 02 add ecx,0x2
0040117B 83C2 02 add edx,0x2
0040117E 84C0 test al,al
00401180 ^ 75 E4 jnz short demo02.00401166
00401182 33C0 xor eax,eax
学了C语言的可能很明显就能看出这是c语言中的strcmp函数,在循环比较两个字符串
中的每个字符是否相等,当然了,百度一下add是加法指令,test指令百度了我看不明白,
但是知道其他指令,我们就能知道这是一个字符串比较操作。
3.到这里,我们知道00401160是真实字符串加密后的给了edx,00401163是我输入的字符串
给了ecx,有的坛友就想到爆破了,将这两句代码改成一样,不就破解了吗?
但是大家看我的代码流程:
成功了写入我们输入的字符串,(而加密后的字符串我直接放在了txt文件里),如果你选择
了将00401160这一行改成lea ecx,dword ptr ss:[ebp-0x18],那么txt文件中加密的字符串
将被我们输入的错误字符串覆盖,你将永远得不到正确的密码。
(所以我友好的增加了用户输入的字符串不为16位,就硬编码方式写入加密后的字符串到txt文件)
好了,言归正传,我们发现整个程序比较后,写入文件就结束了,而我们知道前面
只对我们的字符串进行了xor 0x52操作,我们就只需要对加密后的字符串再次执行
xor 0x52操作,就可以得出正确的密码。
4.到了这里可能有的坛友说,我不会编程,不会写代码,嘿嘿,还记得吗前面就是对我输入的
字符串xor 0x52再去做比较,那么此时我们输入的字符串改为加密后的字符串也就是
o%%%|g`"=8;7|1<o,程序再做xor 0x52后就能得到正确的密码!
OD重载程序,直接F4到00401168这一行,然后在输入加密后的o%%%|g`"=8;7|1<o,这个字符串,
再看寄存器窗口,如图所示:
ECX就是我们输入的o%%%|g`"=8;7|1<o执行xor 0x52后出来的密码,程序直接告诉了我们
密码:=www.52pojie.cn=
至此,程序分析完毕!
源程序下载地址:https://www.52pojie.cn/thread-1026935-1-1.html
欢迎大家留下其他的破解方法,共同学习!
总结:虽然学了这么多天,但是我是零基础小白,到现在勉勉强强论坛官方入门视频教程才学到
了第6课,都是照抄教程的,自己还是没办法分析CM区别人的程序!
最后附上我的学习记录导航贴:https://www.52pojie.cn/thread-1020860-1-1.html
里面有我学习的论坛教程帖子地址和我第1天到现在的学习记录帖子地址
最后,欢迎大家一起来学习破解,我也是零基础,虽然学了这么久还是不会破解,但是
也算懂了一点点破解知识,如果你想一步登天,学了几天就想破解xx软件,那就算了,道不同,不相为谋!
也不要问我学到什么程度,能不能破解,能不能学得会的话题,你都没有坚持学,就问我这种问题毫无意义,
我享受的是学习过程,破解软件是为了验证我的学习程度,我的技术!
PS:其实我学破解是为了装X,为了吹牛,为了炫耀,我原本是在水区和@夏南离 一起水的,没事每天发几篇
从论坛教程抄袭的技术帖子在水区发出来装装X,直到遇到了@小糊涂虫 ......
后面省略一万字......
刚刚对这个程序录了一个视频,看不懂图文教程的可以看看视频:
https://www.52pojie.cn/thread-1028246-1-1.html
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|