夏令营7.22--初识二进制和ida的使用

二进制:

通俗易懂的说法二进制其实就是0和1的组合数制,像十进制逢十进一一样,所谓二进制就是逢二进一。现如今的计算机系统使用的都是二进制系统。

二进制文件:

二进制文件通常为包含在 ASCII及扩展 ASCII 字符中编写的数据或程序指令的文件

国际上的一个统一的标准就是ASCII码。

在这里插入图片描述二进制文件:
在这里插入图片描述
如何学好二进制安全;

读书破万卷
逆向工程核心原理
加密与解密-第三版
使用Ollydbg从零开始Cracking
IDA Pro权威指南-第二版
Intel汇编语言程序设计-第五版
搭建逆向工具平台
运行环境(Win,Linux,Android,x86,x64)
开发调试环境(C,java,python)
逆向环境(吾爱破解工具包)
训练平台
XCTF_OJ练习平台http://oj.xctf.org.cn/
实验吧决斗场 http://www.shiyanbar.com/ctf
Crackme http://crackme.de/
OJ平台 https://www.jarvisoj.com

OD、IDA使用方法

OD使用方法:
http://jingyan.baidu.com/article/215817f78131db1eda1423b1.html
http://blog.csdn.net/hgy413/article/details/7707906
IDA使用方法:
http://wenku.baidu.com/link?url=U45IkREXM351gqDZf1nig9HmF1mKQL0x39147FXE6eb5yVPfrvH-_B4DNJW3WIzr2wYIoh7HXUwGRaq_2xVAwaTncqKBtL-VEC3LP23bdDO

攻防世界 逆向(reverse)第一题re1:

在这里插入图片描述
下载附件后发现是exe文件,运行后,用IDA反编译,
法1:
按F5(有些电脑可能要按Fn+F5)能够查看反编译C代码结果(有一些电脑系统在ida32位的情况下不能按F5没回反应,这时可以试一下ida64位的)
法二:
按选好mian()主函数后:按“View”然后按“open subviews”继续“Generate pseudocote”记得反编译代码;
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

阅读代码发现,程序的功能是将用户输入的flag存入v9,然后将v9和v5比较,如果值相同输出aFlag
既然需要比较flag,那正确的flag应该已经作为一个常量保存在程序内部,可以尝试直接查找flag;
所以我们先把反编译后得到的伪代码的三个print()函数查看:

在这里插入图片描述在这里插入图片描述发现三个输出都没有真正的flag,于是我们应该去看看代码的三个函数(按R、H、D):

在这里插入图片描述

直到第三个出现了flag:

在这里插入图片描述

查阅资料了解到,反编译的结果不是一定正确的,IDA采用递归下降法进行反编译,它的优点在于很少会在反编译时把数据当作代码来处理,不过这次IDA很明显把flag当成代码,进行了反编译,因此在string界面无法找到flag
这次的flag也要反过来才是正确的
flag:
“DUTCTF{We1c0met0DUTCTF}”

由于在程序代码编译产生可执行文件过程中信息量是减少的,导致反编译器在反编译过程中需要做很多“猜”的工作,因此反编译结果也是可能存在错误。

我感觉学二进制和逆向因为没有基础,相关的知识没有学过所以比较吃力,当然逆向和二进制也比较难,所以还有很多知识要去学,还有很长的路要走。

以下是求解多元多项式回归的 MATLAB 代码: ```matlab % 输入数据 x1 = [36.4 37.2 37.2 36.2 31.5 28.9 27.2 26.7 26.1 26.1 25.4 25.3 25.4]'; x2 = [50.0 52.0 49.0 51.0 68.0 74.0 83.0 82.0 88.0 88.0 90.0 88.0 87.0]'; x3 = [982.9 982.2 981.8 981.6 982.3 982.6 983.4 983.5 984.0 983.6 984.4 984.5 984.4]'; y = [-7.30 -7.36 -7.35 -7.33 -7.31 -7.30 -7.26 -7.22 -7.21 -7.23 -7.18 -7.17 -7.14]'; % 构建设计矩阵X X = [ones(size(x1)) x1 x2 x3 x1.^2 x1.*x2 x1.*x3 x2.^2 x2.*x3 x3.^2]; % 求解回归系数 beta = X \ y; % 构建预测模型 model = @(x1,x2,x3) beta(1) + beta(2)*x1 + beta(3)*x2 + beta(4)*x3 ... + beta(5)*x1.^2 + beta(6)*x1.*x2 + beta(7)*x1.*x3 ... + beta(8)*x2.^2 + beta(9)*x2.*x3 + beta(10)*x3.^2; % 预测并绘制拟合图 x1fit = min(x1):0.1:max(x1); x2fit = min(x2):0.1:max(x2); x3fit = min(x3):0.1:max(x3); [X1FIT,X2FIT,X3FIT] = meshgrid(x1fit,x2fit,x3fit); YFIT = model(X1FIT,X2FIT,X3FIT); figure; plot3(x1,x2,x3,'o',x1fit,x2fit,x3fit,'*'); hold on; mesh(X1FIT,X2FIT,X3FIT,YFIT); xlabel('x1'); ylabel('x2'); zlabel('x3'); title('拟合图'); % 绘制残差图 YFIT = model(x1,x2,x3); figure; plot(YFIT - y,'o'); xlabel('样本编号'); ylabel('残差'); title('残差图'); ``` 运行上述代码后,会先绘制拟合图,然后绘制残差图。拟合图中,蓝色的点表示原始数据,红色的点表示拟合值,可以看到拟合值与原始数据比较接近;残差图中,横轴表示样本编号,纵轴表示残差,残差的分布应该比较均匀,没有明显的规律。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值