学习了这么久,实践才是检测真理的唯一真理呀(今天看见两个国外贼漂亮的小姐姐)
DDMS与修改smali混用
1、题目
链接:https://pan.baidu.com/s/1YOXnJYyv2QWfWnP7Jwd2JQ 密码:fsvl
用工具android killer打开apk,先在编译成apk,发现程序能正常运行,并没有apk验证,那么可以改smali代码啦,也许不需要。
接下来看simple.check()函数啦,然后你就会发现,这些人怎么有耐心写这么长的代码(头大)。经过分析可以发现类中成员变量A[]就是存储用户输入的字符串,B[]就是存储flag的
可以直接使用“smali 代码注入”,插入LOG,直接打印出计算后的值
1、构造打印函数
2、插入打印位置
接着就是反编译成apk,然后用模拟器打开,接着ddms动态
3、ddms动态调试
Androidjni编程
1、什么是JNI
JNI(Java Native Interface):java本地开发接口JNI是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++)外部的c/c++代码也可以调用java代码。效率上 C/C++是本地语言,比java更高效代码移植,如果之前用C语言开发过模块,可以复用已经存在的c代码java反编译比C语言容易,一般加密算法都是用C语言编写,不容易被反编译
2、交叉编译
交叉编译即在一个平台,编译出另一个平台能够执行的二进制代码。原理:即在一个平台上,模拟其他平台的特性。
1、常见的交叉编译工具
NDK(Native Development Kit): 开发JNI必备工具,就是模拟其他平台特性类编译代码的工具
CDT(C/C++ Development Tools): 是Eclipse开发C语言的一个插件,高亮显示C语言的语法
Cygwin: 一个Windows平台的Unix模拟器
2、NDK的目录结构
build/tools:linux的批处理文件
platforms:编译c代码需要使用的头文件和类库
prebuilt:预编译使用的二进制可执行文件
sample:jni的使用例子
source:ndk的源码
toolchains:工具链
ndk-build.cmd:编译打包c代码的一个指令,需要配置系统环境变量
3、Android_Studio之NDK安装
搭建ndk环境
1、路径: File->Setting->看图
(这个要等待一段时间)
2、新建项目
然后一直默认下一步,接着自动生成一个demo。
运行结果:
将apk改成zip
发现.so文件
师傅的智慧是无线的,羡慕羡慕。
参考:
https://www.ichunqiu.com/writeup/detail/35