一下午一逆向ayw,———20180829
题目:https://pan.baidu.com/s/1WcwrIZiUw3DNclN-J3lxPA
提取码:le8q
工具:kali ida
题解:
1、elf文件,拖进kali执行一下,权限不够?chmod 777 re0,
发现关键字wrong
2、丢进ida中,shift+F12,锁定关键字所在函数,F5反编译,由代码得
①输入字符串长度14②经judge函数返回为真
3、
(1)进入judge函数看看,报错了,是positive错误,找到报错的地方,有提示:sp-analysis failed,在报错的上一行,alt+k一下,将sp改为正确的即一致的。F5看看judge怎么能返回真,
有提示,“本地变量分配失败,输出可能出错!”,
(2)看一下代码,不正常,看不出判断与返回,还太短了,可能judge函数下面还有许多字符没有被译成代码,用c解一下。发现有些地方上了锁似的,解不动啊。
4、怎么办,回到主函数那里,依稀记得主函数有对judge函数进行处理(这很重要,要敏感),judge函数被整个的异或了一下。写个python脚本异或回来吧。(注:u后缀表示unsigned long,前面0x表示十六进制,十六进制每两位占一个字节. ^异或符)
base=0x600B00
for i in range (182):
addr=base+i
byte=get_bytes(addr,1)
byte=ord(byte)^0xC
patch_byte(addr,byte)
5、跑一下,哇呜!解得开了,再次查看judge函数,又报错,“请将光标在一个函数”,哦,他没将judge函数处理成块,那我们“p”一下,
之后我的ida ‘p’不了啊啊啊,学长的明明可以
哈哈,解决了,‘u’一下judge函数,在‘c’开,再F5就好了
6、之后F5一下,读一下代码,嗯,写个逆算法跑一下就好;
flag_enc="......."
flag=""
for i in range(len(flag_enc)):
c=flag_enc[i]
flag+=chr(ord(c)^i)
print flag
啊啊啊溜了
知识点:
1、chmod开权限,alt+k解决positive错误
2、写python脚本,逆异或