菜鸟起步2-小白逆向学习

查看 98|回复 9
作者:jwkjwk   
一.ex2的分析
1.运行一下程序,发现需要输入密码


图片1.png (37.74 KB, 下载次数: 0)
下载附件
2023-4-12 18:27 上传

2.查看一下文件类型,发现是64位的linux程序


图片2.png (60.59 KB, 下载次数: 0)
下载附件
2023-4-12 18:27 上传

3.放进IDA进行分析,首先查看一下main函数,在main函数中,调用了check1,check2,check3函数


图片3.png (71.85 KB, 下载次数: 0)
下载附件
2023-4-12 18:27 上传

4.分析一下check1函数,该函数的作用是检查传入的字符串是否只包含数字字符。如果字符串中包含非数字字符,则返回0,否则返回1。


图片4.png (53.06 KB, 下载次数: 0)
下载附件
2023-4-12 18:27 上传

5.分析一下check2函数,该函数的作用是将传入的字符串中除了最后一个字符以外的所有字符相加,然后判断它们的和是否为偶数。如果和为偶数,则返回1,否则返回0xFFFFFFFF。


图片5.png (61.95 KB, 下载次数: 0)
下载附件
2023-4-12 18:27 上传

6.分析一下check3函数,这个函数的作用是检查输入的字符串是否符合一定的规则。如果符合规则,返回1;否则返回0。具体来说,如果输入字符串长度为奇数或小于等于4,则返回0。否则,将输入字符串分成两半,分别为前半部分和后半部分。对于前半部分的每个字符,如果它不等于后半部分对应位置的字符加上4,则返回0。否则,返回1。


图片6.png (74.23 KB, 下载次数: 0)
下载附件
2023-4-12 18:27 上传

7.分析完成各个函数以后,程序已然明朗,我们只需要输入长度大于4且长度为偶数的一串数字,满足后半部分对应位置+4等于前半部分对应位置即可。我们输入一个86864242进行测试


图片7.png (39.03 KB, 下载次数: 0)
下载附件
2023-4-12 18:27 上传

二.ex3的分析
1.首先运行一下程序,是个输入密码的程序


图片8.png (51.37 KB, 下载次数: 0)
下载附件
2023-4-12 18:27 上传

2.查看一下文件类型,是一个64位的linux程序


图片9.png (40.23 KB, 下载次数: 0)
下载附件
2023-4-12 18:27 上传

3.放入IDA进行分析,首先看一下main函数,其中调用了check函数


图片10.png (47.08 KB, 下载次数: 0)
下载附件
2023-4-12 18:28 上传

4.查看check函数


图片11.png (53.8 KB, 下载次数: 0)
下载附件
2023-4-12 18:28 上传

5.这其中调用了check1,check2,check3,check4四个函数,我们分别看一下各个函数


图片12.png (18.56 KB, 下载次数: 0)
下载附件
2023-4-12 18:28 上传



图片13.png (22.85 KB, 下载次数: 0)
下载附件
2023-4-12 18:28 上传



图片14.png (23.53 KB, 下载次数: 0)
下载附件
2023-4-12 18:28 上传



图片15.png (21.25 KB, 下载次数: 0)
下载附件
2023-4-12 18:28 上传

6.对各部分代码做一个分析
main():程序首先打印出"What's the password:",然后等待用户输入密码。用户输入的密码存储在v4数组中。程序调用check函数检查输入的密码是否正确,如果正确则输出"Correct!",否则输出"Nope, try again."。
check():该函数接受一个指向字符的指针作为参数a1。函数体内部定义了5个整型变量v2、v3、v4、v5和i,其中v2、v3、v4、v5的初始值都为0,i的初始值为0。然后使用for循环遍历字符串a1中的每个字符,对于每个字符,分别调用check1、check2、check3和check4函数进行检查,如果返回值为1,则对应的整型变量加1。最后判断v5、v4、v3和v2是否都大于1,如果是,则返回true,否则返回false。
check1():判断a1是否大于64且小于等于90,如果是,则返回true,否则返回false。
这个函数的作用是检查字符a1是否为大写字母。
check2():该函数接受一个整型变量a1作为参数。函数体内部只有一行代码,判断a1是否大于96且小于等于122,如果是,则返回true,否则返回false。这个函数的作用是检查字符a1是否为小写字母。
check3():该函数接受一个整型变量a1作为参数。函数体内部只有一行代码,判断a1是否大于47且小于等于57,如果是,则返回true,否则返回false。这个函数的作用是检查字符a1是否为数字。
check4():该函数接受一个整型变量a1作为参数。函数体内部有一行代码,判断a1是否在以下四个区间中的任意一个:(32, 47]、(57, 64]、(90, 96]、(122, 126]。如果是,则返回true,否则返回false。这个函数的作用是检查字符a1是否为标点符号或空格。
7.做完各部分代码的分析之后,程序也比较明朗了,这个程序会检查输入的密码是否包含至少两个大写字母、两个小写字母、两个数字和两个特殊字符。我们只需要输入满足这些条件就可以了。


图片16.png (31.79 KB, 下载次数: 0)
下载附件
2023-4-12 18:28 上传

函数, 下载次数

zhibai1989   

感谢楼主,很有用,多谢分享
wsf5201314   

linux 还没玩过 改天玩玩看
Jackyyy   

看着很厉害!学习一下
pjy612   


看着 很考验 C 的 基本功...(应该是C吧 错了也别打脸...)
hzrzya   

学习一下,
WYLYLFQ   

好厉害,学习一下
wertop   

谢谢分享。
weishi9527   

好厉害,学习一下
www805   

这年代还学逆向,有前途吗?都在学AI了?
您需要登录后才可以回帖 登录 | 立即注册

返回顶部