buuctf [ACTF新生赛2020]easyre

前言:学习笔记。

常规:下载 解压 查壳。

有壳>>>脱壳。

32>>>32 IDAPro打开。

常规:先查找字符串>>>再进main()

分析main():

正向分析:

程序流程:

①        先给v4赋值,再提示”Please input:“ ,v6接收输入函数。

②        判断输入函数v6 (不重要、不影响分析。)

③        v5[i]接收。 v7~v9∈int类型 所以 4字节。

④        循环12次。(结合③、④,大致猜测flag长度为12)

⑤        判断不满足返回。(也就是得不到flag)

所以

猜测 v4[i]其实是 _data_start__[J] 加密之后的值。【先粗】

而 J不仅是_data_start__[的下标]【隐晦的告诉你J的取值范围】 

J = V5[i](变量)-1(定值) 推出>>> J = X-1 >>>X=J+1( v5[i]看成X >>>避免分析时被[i] 影响)【后细】

编写C脚本:

编写思路:

提炼正向分析:

①        v4的值(已知)

②         _data_start__是一个数组且值(已知) 且J是下标。

③        v4 = _data_start__[]进行某种运算之后的值。

④        v5的值【也是就 X 】就是我们所求的flag。

所以,用已知的v4和 _data_start__ 进行逆推。(关键点:在于_data_start__[J]的理解、如何转换)

C脚本:

tip:对于的值提炼最好 Export data(shift +e快捷键) 这样能有效防止漏值、多值等减少出错(细节决定成败)【hex、dec优先,字符还是靠后吧 T^T >>>原因如下,,,】

易错点示范【不是】:(粗心导致>>>字符包含不全面。)

### tip:最好避免 Export data 字符【原因:仔细看你会发现,<;:9876543210/.-,+*)(',27h,'&%$# !"没有被包含在内】(已老实)

正确示范:(咱不使用字符了!! 太可恶了 T^T )

flag{X};

做题总结:

两个易错点:

①        数据的提取>>>现在更推荐使用hex 和dec 【卡了我好久T^T 】

②        对v4[i] = _data_start__[*((char *)v5 + i) - 1]的理解

一开始我写成        v4[i]==__data_start__[J-1] >>>求J,,,这就是对于②的理解不透彻。。T ^ T

解决方法: 胆大,,,心细 心细 心细 。【错了,下次真的不敢了 T^T 】

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值