前言:学习笔记 第六篇。 T T
常规思路: 下载 解压 查壳
看不懂?看不懂,但是,步骤不变。。嘿嘿 QAQ 照样拉进去。
64位>>>拉进64位 IDA Pro!
常规思路:shift+F12 查找字符 再进入main函数。
这个认识,点进去。QAQ
F5 /TAB 转!! 不想看汇编。 T T
正向分析:
global是数组 其值是:看不懂? 没关系 不重要,先不管。
输入的b 进行某种加密,然后在判断其长度是不是33 不是则退出。(合理猜测 flag的长度为33)
当满足33时,进行异或操作:该位与前一位进行异或 且 第一位b[0]不进行异或操作。
比较b 与global的结果是否一致 if T >>>执行>>>Success 否则 >>>else
猜测global是 b进行加密后的值。
逆向:C的脚本 python好久没用了,后面在复习。。
前置
编写思路/知识
:异或基础操作 >>> A^A = 0 A^B = C B^C = A 【记不太清。。。哈哈哈】
###逆向逆向 >>> 倒着往回执行。
已知global是加密后的值(猜的)QAQ >>>你倒着往回执行不就逆出来了吗?
global我缩写成g吧,太长了 沃趣 - -
异或时(正向):
b[1] ^= b[0] b[2]^= b[1] ... b[32] ^= b[31] (别问为什么没有33 ,因为这是数组 从0开始算的..)
那么~逆!!把你加密的g 拿进去异或运算用g代替b(这样通俗好理解点>>>正向执行改成逆向执行)
所以>>>
g[32] ^= g[31] g[31] ^= g[30] ... g[1] ^= g[0]
g[0] ^= ....想多了,审题!超级真蛋 (推荐去看。。。哈哈哈哈>>>补笔记无聊,发癫【已老实】)
>>>为什么? 因为b[0]不参加。你g[0]干嘛要参加。。。。
欸,这个。。。算了,分析和 为什么那样写脚本 都可以借助这个来理解。
正题
【重点重点!!统一字符 养成习惯!】选中然后导出来(shift+e>>> 快捷键) 。。。导。。eeeeeeee
原因:你直接CV大法很可能会跑不出来【算法其他没错,字符太乱C报错】(已老实T T)
然后就可以结合着分析去编写C脚本了。【没有python脚本 俺不会- -】
C脚本
为什么有乱码?我也不知道,不要问我 呜呜,继续学 T T
不对,乱码咋了 >>> 那咋了(快速逼近)
拿着flag去提交 正确。
ok,那这么说 ” get_line(__b, 0x100u); “ 没啥用呗0.o? 干扰思路的。。。?