171102 逆向-EISCTF(Mobile)

来源:互联网 发布:初中英语网络课程 编辑:程序博客网 时间:2024/05/16 02:19

1625-5 王子昂 总结《2017年11月2日》 【连续第398天总结】
A. EISCTF-Mobile
B.

FlagApp

直接安装发现报错,直接拖入APK改之理也反编译失败
刚开始以为是签名问题,查了一堆,学会了用keytool生成密钥库,然后用jarsigner签上了名
仍然报错OTZ
仔细检查了一下发现APK改之理里提示了DEX的MagicNumber错误
搜索了一下APK的十六进制数据,也没有找到对应的MagicNumber
于是用Winrar打开,解压出dex和lib文件
它们倒是没问题,可以直接通过dex2jar和IDA来反编译得到源码
大概看了一下
程序获取输入内容,然后通过check方法校验
而check方法是native的,源码在so库中,于是继续反编译:
这里写图片描述
这个是ARM架构的so库,代码为dalvik汇编
不过IDA反编译出来还好,大体上就是一个运算后与数组校验的过程
dump下来逆运算就可以了

d = [150, 84, 20, 63, 86, 46, 111, 117, 36, 70, 76, 43, 90, 151, 32, 133, 205, 64, 180, 56, 78, 44, 90, 119, 119, 44]f = [62, 125, 126, 80, 126, 227, 227, 59, 34, 96, 196, 192, 20, 63, 70, 75, 97, 14, 210, 148, 165, 132, 118, 17, 88, 131]s = "123456"flag = ""# print(len(d))# print(len(f))# 正向for i in range(len(s)):    p = d[i]^((ord(s[i])>>3)|((ord(s[i])<<5)&0xff))    # print(hex(p))# 逆向for i in range(26):    p = f[i] ^ d[i]    flag += chr((p>>5)|((p<<3)&0xff))print(flag)

值得一提的是我刚开始处理的是x86架构的so库,得到的是intel汇编,反编译出来也差不多,结构和库函数稍有区别,不过个人理解有点困难,所以想动态附加一下试试

基本过程之前也提过,先adb push IDA目录下的android_server,然后adb shell运行,然后进行forward tcp端口转发,接着就可以IDA附加了
IDA选择attach to process时报错debugger id is 11, excepted 1(linux)
百度也没看到有相关的问题,于是在这里提一下
x86架构的so反编译时,IDA的debugger只会提供与pe/elf相同的选择,例如remote linux、remote gdb等
而arm架构的so反编译时,IDA才会提供arm/android的debugger
报那个错的原因就是debugger选择错误,我当时斟酌了一下选择了remote linux,想连接android_server当然会错误

另外,由于IDA给的android_server是ARM架构的,因此IDA不可能附加到x86架构上的模拟器或是so库上。目前我还没找到有人提供x86架构的android_server╮(╯_╰)╭所以IDA动态调试只能通过真机了

C. 明日计划
pwnable.kr练习

原创粉丝点击