|
吾爱游客
发表于 2015-10-4 11:45
不好意思,本来以为写着“没有精华文章,只想学习也能通过”就没有贴文章,看了一下别人通过的情况,我还是现写一点吧,前面那个申请id为torres9的就无视好了
1、申 请 I D:Torres9
2、个人邮箱:ArRan_Tien@126.com
3、原创技术文章:本人计算机专业,平时乐意给周围的人解决一些bug,调试,算法的问题,但是并不在网上分享自己的文章,最近,对一个库很感兴趣,所以开始研究逆向工程,希望能够申请通过
熟悉Java,安卓的反编译,熟练运用dex2jar, apktool 和IDA Pro 6.6,平时主要用的编程语言是C,C++,Objective-C, Java, Scala和Python,有这方面问题的话很乐意解答
那我就当场写一个如何编写arm架构的C语言程序,我先说说为什么要这样做,我想了解一个高通的Vuforia库的内部算法实现方式,这是一个增强现实库,他提供了java接口和.so的shared library.
当然一种动态调试的方式是你用这个库写一个安卓程序,然后用IDA Pro一步步动态调试到.so函数库,但是那样的话每次调试都有很多不必要的东西要运行,事实上你可以写一个C程序来调用.so函数库,编译成arm架构,然后在安卓上运行,这样也是可以用IDA Pro来调试的,那下面就开始说明怎么写了
首先我用IDA Pro看到库里有一个叫QCAR::Trackable::getClassType()的函数,我想看看这个函数到底做了什么,但是按了F5发现,伪代码并不能看懂,所以我写了一个C程序来调用这个函数,然后动态调试
C代码是这样的:
看到这里大家应该能理解我想干什么了,就是去掉所有我们不想了解的函数,以免他们分散我们的注意力,用apk的话有很多冗余的东西,很难找到入口
要编译这个程序要用到ndk-build 要是不知道ndk是什么,那就不用看下去了
把代码和Android.mk Application.mk都放在jni文件夹下
Android.mk的文件内容是这样的
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Vuforia #定义已有的高通库的位置和模块名,使得之后能调用
LOCAL_SRC_FILES := libVuforia.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := AndroidC
LOCAL_C_INCLUDES := include
LOCAL_SRC_FILES := a.cpp
LOCAL_SHARED_LIBRARIES := Vuforia #调用高通库
include $(BUILD_EXECUTABLE) #这一步跟我们平时用jni生成so库是不一样的,我们现在要生成可执行文件,很神奇吧ndk不只是能用来做so库的,他能生成很多架构的库和可执行文件
然后运行一下ndk-build
你就会发现在jni/../libs/armeabi-v7文件夹下就有了一个叫AndroidC的可执行文件,和一个高通的libVuforia.so把它们两个拷贝到android手机/data/local/tmp路径下,用adb shell就能运行了,运行的时候要把/data/local/tmo加到LD_LIBRARY_PATH,因为这个函数要调用libVuforia.so,而这个库在/data/local/tmp下,很多人都转载了关于这个的文章,但是基本都有缺陷的地方,比如文章里是用arm-none-linux-gnueabi-gcc编译的,但是用这个编译后面要加好多参数,对我我这种写什么都要查一下参数的人来说不方便,但是ndk-build里面就很人性化,一看就知道这是要加什么参数,并且可以多架构编译
第二就是手机并不需要root,只要你文件放置的位置是tmp文件夹下就好,我第一次接触这个的时候也不知道,花了两三天的时间下载各种软件root自己的手机
然后如果你要用IDA Pro动态调试这个程序,可以看一下这篇文章:http://finn.svbtle.com/remotely-debugging-android-binaries-in-ida-pro,这边就不多说了
这个事情很多人都做了,我这也不算原创了,只是试了很多方法,走了很多弯路,想把最好的方法告诉大家,不浪费大家时间
审核的人,看在我手打这么多字的份上就让我通过了吧
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|