好友
阅读权限10
听众
最后登录1970-1-1
|
_默默_
发表于 2019-5-2 12:37
一、前言- KeyFile是一种利用文件来注册软件的方式,程序通过读取文件里的二进制流来判断用户是否注册。
- 此CrackMe来源于加密与解密随书文件。
- 如有c币囊中羞涩的朋友 可以回帖让我贴度盘。
- 此CrackMe书上直接看纯汇编写了出来,鄙人没那个本事,鄙人使用od与IDA同时分析。
二、正文
- 首先我们来看一下界面
-
- 发现界面并没有输入框,只有check与exit,此时就可以猜测程序使用了KeyFile的注册方式,我们可以使用工具procesmonitor监视程序的行为,看程序要读取哪个文件。
- 界面如图(如果要我的软件也可以回帖跟我说)
-
- 我们可以使用filte(过滤)功能选择我们要监视的程序,将第一个框中选为processname,输入程序名,add,apply。打开程序就可以看见程序干了什么了。(主界面第一排图标最后几个就是过滤程序行为,因为程序做的事情太多可以选择过滤一些对我们没有什么价值的程序行为)
-
- 点击check后,我们可以看到,程序读了我当前目录下的一个KWAZYWEB.BIT的文件,还读了qq输入法里的一个文件(我不知道这是在干嘛),但明显当前目录下的文件更像是KeyFile。我们便可以伪造一个KeyFile去动态调试看看程序是如何检测的。
-
- 因为使用promonitor可以看到程序调用createfile读取文件,我们便可以在createfile处下断点,ctrl+g搜索函数将createfile2,createfilea下断点,f9运行后发现程序读了qq输入法,再次f9,程序处于running,点击check,断在DLL领空,ctrl+f9快速跳出程序如图:
-
- 看见readfile函数想必这段代码就是检测文件数据是否正确了。
- 一步步f8就会发现第一个readfile读取文件的第一个字节,存入eax,然后第二个readfile读取eax个字节,第三个readfile固定读取0x12个字节,联想之前做的CrackMe使用两个GetItemText分别读取用户名与注册码,推断此处也应该为此方式。
- 后两个call readfile后紧跟着两个call,可推测为变换函数。
- 第一个变换函数401000看汇编也很好理解,就是将用户名累加,存到一个指定的地方。(记着,这个东西肯定后面有用)
- 第二个变换函数4010c9看的一脸懵逼,开IDA,在IDA函数窗口中很容易就能找到sub_4010c9,f5查看伪代码,如图:
-
- 容易看出string2是一串神奇的字符串,基本就可以断定这是一道迷宫题(记着)。程序将字符C所在的地址存在off_403184,随后sub_40101D函数对从文件读入的数据逐个异或某个值(动态调试不难发现这个),而这个异或的值就是用户名累加后的结果(以后要记着,我反正半天都不知道这个值怎么来的)
- 关键函数sub_401033,参数为两个二进制位,其实就是将文件中用户名后的数据当成二进制流,一次传输两个二进制位。从 -16 就可以推断是一个16列的迷宫,写脚本打印迷宫。也不难看出01 右 10 下 11 左 00 上。
- 根据迷宫手写二进制流(走迷宫的代码不会写......)
- 我将用户名设置为52pojie,得到和值为0x7e,将二进制转换为16进制再异或0x7e就得到了注册码,利用16进制编辑工具就可以写KeyFIle了
- 二进制流如下:10101001 10101011 10100101 00010000 01010100 00111111 00110000 01010101 01100101 00010110 01010110 10111110 11110011 11101010 11101001 01010000 01010101 10101111
- 对应16进制数:0xA9,0xAB,0xA5,0x10,0x54,0x3F,0x30,0x55,0x65,0x16,0x56,0xBE,0xF3,0xEA,0xE9,0x50,0x55,0xAF
三、总结
以后写题要对关键处做必要的记录,以及尽量去理解程序逻辑,而不是去关心运算。
那个txt文件是KeyFile,改一下后缀就好。有什么问题及建议都可以提啊,包括本人的写作水平,嘤嘤嘤。 |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|