图文精华

分享

一阶段学术文章-知识汇总

一阶段学习内容导向:
1. 正向,javaandroid开发
2. 逆向smali(静态分析与动态调试)
正向方面需要注意的点:
Ø JDK环境的配置
1) 下载对应的jdk安装包;
2) JAVA_HOME配置jdk安装的目录;
3) Classpath配置:” .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”;
4) Path配置:”%JAVA_HOME%\bin”。
5) 确定环境是否配置正常采用cmd下执行java”、”java-version(查看是否为你安装的版本)javac,若能正常运行则代表java已经配置好了。
Ø Android-SDK环境配置和对应版本的安装:
1) 下载所需的Android-SDK安装包;
2) 找到Android-SDK安装目录,然后就双击“SDK Manager.exe”,启动SDK Manager,如图所示:
Tools文件夹里面的Android SDK Tools(这个我们在之前的一步已经下载好了的,一般不会让你再安装了,不过有可能会让你更新),然后就是Android SDK Platform-toolsAndroid SDKBuild-tools,注意只需要下载最新的版本就行了。
然后就是API的选择了。我们可以看到这里提供了很多Android 版本的API,这里我建议,新手的话,选择一个最新的版本就好了,因为Android是向下兼容的。其他的以后你要用到了在下载就行了。这里我是全下载了。
接下来就可以进行安装了。要注意,由于这些东西都是在google 的服务器上下载的。所以国内肯定是下不动的,这个时候就需要vpn或国内的镜像站了,这里推荐使用镜像站:
1、中科院开源协会镜像站地址:  IPV4/IPV6 : http://mirrors.opencas.ac.cn 端口:80
2、北京化工大学镜像服务器地址:
IPv4: http://ubuntu.buct.edu.cn/  端口:80
IPv4: http://ubuntu.buct.cn/  端口:80
IPv6: http://ubuntu.buct6.edu.cn/  端口:80
3、大连东软信息学院镜像服务器地址:http://mirrors.neusoft.edu.cn  端口:80
点击菜单中的“Tools”,然后选择下拉中的“Options…”
接着点击close,关闭对话框,再重新启动SDK Manager就行啦。
经过漫长的下载安装过程后,我们可以看到,之前选中安装的项目后面的状态都由之前的“Not installed”变为了如今的“Installed”,这就表示我们已经安装成功了!
3) ANDROID_SDK_HOME配置sdk安装的目录。
4) Path配置:”.;% ANDROID_SDK_HOME%\platform-tools;% ANDROID_SDK_HOME%\tools”。
5) 确定环境是否配置正常采用cmd下执行 android -h正确则代表tools配置正确,执行adb执行正确代表platform-tools配置正确。
到此jdkandroid-sdk环境配置完成。
然后javaandroid的开发就不说了,网上百度下java的基本语法和android的布局文件的使用配置就行了,毕竟不是要在正向上使劲。
下面就要说到一阶段的重点了 apksmmali逆向(划重点的);
要学会apk的逆向首先需要了解几个方面的知识:
1) apk是什么?Apk文件下的文件结构,以及文件存在的意义是什么?
² Apk其实就是一个压缩包,使用我们常用的解压工具就能看到apk的文件结构,是dalvik vm的可执行文件;
² AndroidManifest.xml 文件:类似于 Java EE 应用的 web.xml 的角色,定义了整个应用的运行信息。包括:包名、权限、API 版本、组件等等信息(后续会详细介绍)
² classes.dex 文件:包含了应用的整个代码逻辑,其以 Dalvik 字节码的形式存在
² lib 目录:包含了应用需要的原生库文件,其主要是从 c/c++ 代码编译而来
² META-INF 目录:主要存储了应用的证书和签名信息文件
² res 目录:包含不能打包进 resources.arsc 的一些资源文件,如图片、布局信息等等。
² resources.arsc 文件:应用资源文件
2) Apk的打包、安装、卸载的流程;
² 打包流程:
n javac工具将*.java文件进行转换,转换后通常得到一个*.class文件;
n dx工具对*.class文件进行转换,转换后通常得到一个*.dex文件;
n 通过aapt工具打包所有的资源文件打包得到*.ap_文件;
n 通过apkbuilder工具把前两步得到的*.dex*.ap_文件打包生成apk
² 安装流程:
n 可以参考下https://www.cnblogs.com/neo-java/p/7117482.html(推荐,特别详细)。
卸载流程:
n 1,PMS的内部结构上删除acitivityserviceprovider等信息
n 2,更新Settings中的package信息
n 3.删除coderesource等信息
n 4.删除dex文件
n 推荐看下https://blog.csdn.net/u012439416/article/details/61614326
n Android的常用的命令集(adbadb shell);
3) Dalvik的指令集:
n 推荐看下https://blog.csdn.net/u013107656/article/details/54944089;常用的都有了,需要的时候查下就行了,经常用到就能记住了。
4) 几种逆向工具的使用;
n Jadx-gui:常用反编译利器,同时支持命令行和图形界面,可以同时查看smali代码和java代码,但是缺陷也很明显,对应混淆过的代码显示不够友好,对应电脑配置好的同学推荐使用他的搜索功能,加载一次全局搜索秒出结果;
n Jeb:常用反编译利器,即使apk高度混淆,代码也能清晰的还原出来,对应混淆严重的apk可以使用jeb代替jadx来使用,不过由于集成的功能太多,使用的时候响应较慢,debug现在基本都使用as来代替了,所以一般都只是拿来分析java源码使用;
n Android killer:常用反编译利器, 全程依赖apktool,将命令行转换为可视化操作,界面简单清晰,但是Android版本更新迅速,而Android Killer早已不再更新,这不能不说是一个遗憾,也许有人会想到APK改之理(又叫APKIDE)AndroidKiller对高版本的编译会卡在代码的位置;
n DDMS工具:主要用于查看线程和堆的信息,查看logcat日志信息;需要注意的时候有些apk并没有将一些关键的日志信息输出,所以并不是无敌的利器,使用有一定的局限性,并且分析内容过多,不好定位也是无可奈何的事;
n uiautomatorviewer工具:这个工具主要使用在app的测试上,比如自动化测试等,但是在逆向中主要是定位原生界面中控件定位,注意如果界面是H5webview)将无能为力。
5) 定位分析方法的使用;
n 定位分析主要使用在静态分析时,当然也有动态分析的不过一般都不会附加到代码进行调试,一般逆向都分为两个阶段,静态分析和动态调试,静态分析通常是用在定位关键位置或者直接找出结果,动态分析通常使用在静态分析无法或很难再有精进,需要hook方法或调试来进一步获得关键位置。
n 定位分析法主要有:
u 入口分析法 每个Android程序由一个或多个Activity及其他组件组成,每个Activity负责实现不同的功能。对功能较为单一的,从程序的入口开始进行分析是一种标准的方法。
u 信息反馈法:在apk运行中,界面上会显示某些关键信息,如支付失败、实名认证提示、vip提示等,这是可以通过界面上反馈的信息中。通常情况下,程序中用到的字符串会存储在String.xml文件中或者被硬编码到代码中。如果是前者,字符串会在程序中以id的形式访问,只需在反汇编代码中搜索字符串的id值即可找到调用代码;如果是后者,在反汇编代码中直接搜索字符串即可。
u 特征函数法:  通过特征函数法定位代码的方法与信息反馈法类似。在信息反馈法中,无论程序给出什么样的反馈信息,最终都需要调用Android.SDK中的相关API函数完成。  特征函数法需要分析人员对Android程序开发的流程有所了解。在分析过程中,针对不同类型的APK程序,配合查阅SDK文档,找出其可能用到的特征函数,然后定位程序的关键单,是常用的静态分析手段之一。
u 代码注入法:通过注入log,回编译安装执行后,查看logcat调试信息的代码,来定位关键方法,但是这种方法的缺陷也很明显就是可疑点越多,耗费的体力就越多,因为插入的点太多导致日志的分析效率变低。
u 栈跟踪法:这个和代码注入法相识,就是在程序执行时,在DDMS中查询栈调用跟踪信息来定位关键信息。
6) 动态调试方法的使用。
动态调试分为以下几种:
n 可以在无源码的情况下,反编译apk文件,并在反编译得到的java源码上跟踪调试apk应用。并利用Eclipse的观察变量,查看线程,调用堆栈等功能。参考链接:https://blog.csdn.net/roland_sun/article/details/26399669
n Smali代码调试:采用AndroidStudio,安装smaliidea,来进行调试。参考链接:https://www.jianshu.com/p/1a28e6439c6a
n Hook大法:采用AndroidStudio+ xposedpycharm + frida来进行关键方法定位,通常使用在算法破解协议分析上都有奇效。
u AndroidStudio+xposed参考链接:https://www.cnblogs.com/ichunqiu/p/8575173.html
u pycharm + frida参考链接:https://www.jianshu.com/p/ca8381d3e094
7) 常用命令整理(排名不分先后):
adb devices
adb kill-server
su:获取root权限
cd:进入某目录
adb push:上传到android
adb pull :从android下载
chmod 777 system/app/1 :设置文件读写执行权限
adb install 1.apk 安装
adb uninstall 包名:卸载
adb shell pm list packages:获取设备中所有包名
adb shell pm list packages -f:获取设备所有包名并且包括APK路径
adb shell am start -D -n 包名/Activity类名: 调试启动app
adb forward tcp:8700 jdwp:18896:端口转发
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700java调试器附加到vm 8700端口
adb shell dumpsys:获取在连接的设备上运行的所有系统服务的诊断输出。此输出通常比您想要的更详细,多用在app测试上,逆向中通常在此命令后追加 activity | findstr pid,来获取活动界面类名和进程号。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

已有(1)人评论

跳转到指定楼层
小飞 发表于 2021-7-26 16:36:43
牛B学习了。
<
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则