吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16879|回复: 88
收起左侧

[原创] 学破解第63天,自写的简单的C语言字符串异或加密分析

  [复制链接]
小菜鸟一枚 发表于 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,这个字符串,
再看寄存器窗口,如图所示:
1.png
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

免费评分

参与人数 27吾爱币 +33 热心值 +25 收起 理由
2586blj + 1 + 1 谢谢@Thanks!
追逐太阳 + 1 + 1 看不懂c语言,但是还是要支持一下
爱拍阴天 + 1 + 1 用心讨论,共获提升!
清炒藕片丶 + 1 热心回复!
liminghui168 + 1 + 1 我很赞同!
一牛神一 + 1 + 1 用心讨论,共获提升!
↑帝↑ + 1 + 1 我很赞同!
Vegetables + 1 + 1 热心回复!
liphily + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
马马虎虎 + 1 + 1 用心讨论,共获提升!
Hmily + 5 + 1 用心讨论,共获提升!
quandu + 1 + 1 用心讨论,共获提升!
贾斯科 + 1 + 1 用心讨论,共获提升!
冰雪冬樱250 + 1 + 1 谢谢@Thanks!
有梦想滴蜗牛 + 1 + 1 用心讨论,共获提升!
dreamlivemeng + 1 + 1 热心回复!厉害了
墨墨殿下 + 1 用心讨论,共获提升!
不拍电影不掉泪 + 1 热心回复!
daniel7785 + 1 用心讨论,共获提升!
CrazyNut + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
玖公子 + 1 用心讨论,共获提升!
JuncoJet + 2 + 1 楼主论坛等级好流弊啊
jidenanian + 1 我很赞同!
联合卡环 + 1 + 1 用心讨论,共获提升!
独行风云 + 1 + 1 我很赞同!
nomoretime + 1 我很赞同!
boyving + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

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

 楼主| 小菜鸟一枚 发表于 2019-9-23 13:54
本帖最后由 小菜鸟一枚 于 2019-9-23 20:14 编辑
我叫蛋dan 发表于 2019-9-23 13:37
总结下来可以说是密钥是52 然后对明文密码进行了加密 每次对比都要解密加密对比是么

还有就是 做一个cr ...

xor 52就是对字符串进行了异或操作,注意数据窗口里面你输入的数据改变了,你肯定就知道上面是改变字符串了,单步把上面循环跟几次,注意数据是在经过xor 52这一行逐个改变就知道了是对整个字符串进行了异或操作,然后其他的汇编代码我也不懂,都是靠百度的,没学过汇编。
多关注堆栈窗口和数据窗口,汇编代码我都是百度的。
有些不懂,但是数据改变了,像上面,你说的前面那个命令我不懂,但是我看到信息窗口显示,前面那句是我输入的数据1,不管他怎么算,反正记得他就是一个1,然后xor,得到一个加密后的字符。

针对这个图文教程,我做了个视频,你可以参考一下:https://www.52pojie.cn/thread-1028246-1-1.html

免费评分

参与人数 1热心值 +1 收起 理由
玖公子 + 1 用心讨论,共获提升!

查看全部评分

 楼主| 小菜鸟一枚 发表于 2019-9-23 10:44
本帖最后由 小菜鸟一枚 于 2019-9-23 10:45 编辑
小糊涂虫 发表于 2019-9-23 09:20
为了装X就是错误的,学习方向都是错的,况且高手太多(一般都隐起来了),就目前而言装X一般不会成功

现在我还是有一颗虚荣心,喜欢炫耀,喜欢装X,我现在目标是向大哥这个用户组出发,边学破解,边学点c语言,最后再去研究算法。

不过看论坛的零基础入门贴,我估计我的学习之路还很漫长。
哦,对了,大哥,请教一下,脱壳方面你有没有一些新的壳脱壳视频教学,我要把你的技术都学过来,这样我就更有信心的装X了。(适当的装X才有继续学习的动力)

看了看目标:
LCG要求:windows脱壳和破解题
所以想找找脱壳方面的教程存起来以后学习。


免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
玖公子 + 1 谢谢@Thanks!
夏南离 + 1 + 1 用心讨论,共获提升!

查看全部评分

莫莫 发表于 2019-9-22 22:27
非常感谢 曾经我也想,但没有坚持下来,不过另一方面坚持下来了 加油
头像被屏蔽
夏南离 发表于 2019-9-22 22:27
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 小菜鸟一枚 发表于 2019-9-22 22:28
莫莫 发表于 2019-9-22 22:27
非常感谢 曾经我也想,但没有坚持下来,不过另一方面坚持下来了 加油

嗯嗯,不管我们在做什么,自制力很重要,长期的坚持下去,最终才能看到结果!

免费评分

参与人数 1热心值 +1 收起 理由
玖公子 + 1 谢谢@Thanks!

查看全部评分

 楼主| 小菜鸟一枚 发表于 2019-9-22 22:34
夏南离 发表于 2019-9-22 22:27
额,吹着吹着就学到了,也不错了

在论坛做了快两年的伸手党,除了找软件基本不上论坛,今年心情一直不好,就想着论坛这个虚拟的网络世界来吹吹牛,吐吐苦水,然后........,不知道怎么跑偏了,可能是被LCG那位大哥热心的帮助我感动了,不好意思让它知道我其实就是在水贴,然后就从吹牛,变成了真的学技术了!

免费评分

参与人数 1热心值 +1 收起 理由
玖公子 + 1 用心讨论,共获提升!

查看全部评分

头像被屏蔽
夏南离 发表于 2019-9-22 22:49
提示: 作者被禁止或删除 内容自动屏蔽
如海之汐 发表于 2019-9-22 22:57
厉害,加油
jcy520 发表于 2019-9-22 23:09
看起来很厉害样子哦。
炖锅 发表于 2019-9-22 23:09
加油楼主!
boyving 发表于 2019-9-22 23:12
鼓励一下。。。坚持就是胜利
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-28 14:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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