安卓逆向学习----关键函数定位的各种hook方法
如果让我读全部的代码,那你真的不如杀了我!所以代码定位很重要,所以在这里就整理一下对于一些android自带的函数进行调用从来进行寻找关机代码和数据!
1、打印堆栈信息123456789function showStacks() { console.log( Java.use("android.util.Log") .getStackTraceString( Java.use("java.lang.Throwable").$new() ) );}
2、HashMap的put方法12345var hashMap = Java.use("java.util.HashMap");hashMap.put.implementation = function (a, b) { console.log("hashMap.put: ", a, b); return th ...
安卓逆向学习----Frida常见的api(java层)
静态方法和实例方法的hook太喜欢原神辣!所以就拿newstar week2的原神题来操作一下
做例子hook了!
使用frida进行hook的时候,无论是有没有带 static 的方法都是可以进行调用的
那就hook这个whatme函数吧,hook出encode函数的data数据和CUSTOM_TABLE(码表)
这是一个base64加密,码表是经过rc4解密之后的结果,我们可以通过hook直接拿到码表,当然也可以通过修改rc4的返回值修改码表
123456789101112Java.perform(function () { var base64 =Java.use("android.util.Base64"); var whatme=Java.use("com.genshin.impact.whatme"); whatme.encode.implementation=function (a,b){ console.log("加密的参数是:",base64.encode ...
给QLNU2023级新生第一次校赛题wp
很抱歉本次比赛给大家带来了不好的体验,本次比赛的本意是让大家学到更多的知识,所以大家就当做是学习资源,去复现这些题吧(不懂的地方可以私聊我)签到抱歉抱歉,给各位磕了,第一版附件难了,看第二版就行了!(其实就是加了一点点知识)
旧附件
无壳,32位
定位到关键的代码函数
12for ( i = 0; i < strlen(Str); ++i ) Str[i] ^= (unsigned __int8)i ^ 2
这个str[i]^=i^2可以看成str[i]=str[i]^i^2
C语言基础的语法了属于是
然后密文在哪??额这波纯属是我套娃了,密文在一个定义的函数里面,函数嵌套了16层(闲得无聊弄得)
可以选择点击16次找到定义密文的函数,也可以shift+f12拿到密文
至于这个加密怎么逆呢,就……再异或一遍就行了
这就是异或的特征了,写脚本的时候这么写就行了,这里附上简单的python脚本:
12345678910flag = "SONT}Paii;eVZ?S\\#}eRBqKDVUMFGfXn_"flag ...
安卓逆向学习篇---算法复现以及协议复现(js、python)
算法复现:md5部分首先是调用,就直接是调用大神写的Crypto了(全当python的库文件了)
首先复现一下md5的加密算法
md5的加密之前数值是: equtype=ANDROID&loginImei=Androidnull&timeStamp=1699870290703&userPwd=woshimima&username=11112222333&key=sdlkjsdljf0j2fsjkmd5加密之后的数值是: f47d70a0d19de14449c66eada93469af
先看一下jadx的源码
12345678910111213141516public void addRequestMap(Map<String, String> addMap, int a) { String time = System.currentTimeMillis() + ""; if (addMap == null) { ...
安卓逆向学习篇---frida_server应用
frida的使用环境搭建配环境好麻烦好麻烦的!!!哎
为了方便学习,以下所有的东西都打包到了阿里云盘:
frida_server.txt https://www.aliyundrive.com/s/RwsGa937eh9去010修改文件头为PK(50 4B 03 04)然后修改后缀为zip解压
注意版本!!一定要注意版本!
本人环境:
Python 3.8
xiaomi9 root android 12
Frida版本: 14.2.18
tips:另外好像有python的要求,我个人是建议使用python3.8(最好是3.8.6之前的版本)
虽然差别不大,但是本人亲身经历,3.8.6之后的python打包的exe程序就用uncompyle6反编译不出来了!
下面都是按照python8展开的环境配置
frida和frida-toolspip install frida
pip install frida-tools
python3.8配置直接安装python3.8.3傻瓜式安装就可以了,注意自动添加PATH环境变量就好
webstorm安装用来写js代码,一个简单的js编辑器(其实没有也 ...
安卓逆向学习篇---抓包证书配置
原理:讲用户的证书移动到系统正式才能被正确地识别
系统证书路径 :/etc/security/cacerts
用户证书路径: /data/misc/user/0/cacerts-added
由于这些目录只有只读权限,所以无法直接移动
打开magisk输入Move Certificates模块即可
刷完之后,就可以看到在用户没有包了,那就是被传到了系统里,就可以直接使用了
抓到包是unknown,ε=(´ο`*)))唉出问题了,证书还是没配好,手机端应该没问题,大概率是电脑的问题了
那就大胆一下,重新装一下证书
重装证书在charles里:help -> SSL proxying -> save charles root certificate 然后把证书保存到桌面上,起一个自己的名字
用adb shell 进入 /sdcard目录下 ls一下查看文件,没有找到
所以就不删除了,如果有pem文件,就要rm -rf 给pom文件删除掉
然后在win端把自己生成的pom文 ...
安卓逆向学习篇---Android studio环境搭建以及使用
Android studio环境搭建以及抓包首先下载Android studio ,阿里云盘分享安装包(4.2.0版本):
https://www.aliyundrive.com/s/hNfYRTXcyyi
汉化其实汉化意义不大,但是为了方便学习,看起来更舒服,就简单汉化一下
贴一个csdn的博客,可以跟着大佬汉化一下:
Android studio中文汉化详细教程配置前面的一些配置我就简单略过了,(写的时候已经配完了,就正常的配置)
SDK的安卓版本可以选择一下安卓10
package details选择30.0.3版本
SDK tools可以如下选择:
Android studio的一些基本知识:新建项目文件-新建,创建一个项目,然后有很多图形化的界面可以选择,我选择了c++的版本然后又这样的一个界面:、
从上往下依次是项目名称-包名-存储位置-语言-SDK路径最低要求
然后在gradle查看一下插件版本是否匹配,不匹配的话编译会报错
编译apk按照如下指令进行编译:
燃点击之后就在如下文件夹出现apk-debug,之后用模拟器打开,就成了 ...
给QLNU2023级新生re入门题wp
RE【你看我反不反就完了】字符串对比:拖到die中,发现是无壳,64位,拖动到64位的ida中进行反编译
成功打开后,就找到了最开始界面,就已经看到了flag
可以按一下f5进入伪代码的窗口:
这样就得到了flag:QLNU{he11ow_re!}
可以win+r 然后输入cmd进行命令界面,然后把程序拖动进去,输入得到的flag,显示输入正确
【阿斯克】ascll码表对比:还是一样的查壳,是64位无壳,直接进行反编译
这里看到了有一个v5的数组,这个就是所谓的ascll码
ascll码81对应的字符的‘Q’,76是‘L’,所以不难猜测,这一串字符连起来就是flag了
81,76,78,85,123,119,51,49,99,48,109,101,95,116,48,95,114,51,125
flag:QLNU{w31c0me_t0_r3}
给一个比较不错的转化网站实现ascll码、16进制、10进制、二进制互相转化:
https://www.rapidtables.org/zh-CN/convert/number/ascii-hex-bin-dec-converter.ht ...
给QLNU2023级新生re入门题出题源码
【re1】字符串对比:12345678910111213141516#include <stdio.h> // 引入标准输入输出库#include <string.h> // 引入字符串处理库int main() { // 主函数 char input[100]; // 定义一个长度为100的字符数组,用于存放用户输入的字符串 printf("hello welcome to RE! \n"); // 输出欢迎语句 printf("please input you flag:\n "); // 提示用户输入flag scanf("%s", input); // 获取用户输入的字符串 if (strcmp(input, "QLNU{he11ow_re!}") == 0) { // 判断用户输入的字符串是否等于"QLNU{he11ow_re!}" printf(&q ...
安卓逆向环境搭建---吾爱复现
一、模拟器环境搭建1、工具下载下载一键收回雷电9官网地址:https://www.ldmnq.com/
或者有我个人的工具包,在群里
apk_debug2、apk_debug:https://yzhqvq.lanzoux.com/b02vfzqmh 密码:52pj
选择下载里面的apk_debug文件
2、模拟器开启root权限在模拟器设置中,选择root,然后重启就可以了
3、安装并部署apk_debug(此文件也叫magic,也叫面具)
将debug拖到模拟器中,自行安装
安好之后图标是这样的:
首次打开之后会有一个提示:请求root权限的,选择永久记住选择就可以了
然后点击安装,之后弹出的所有请求权限都允许即可
然后就来到了这个界面:
此时不要动,然后稍等一会,然后按右下角的方块键,把这个进程给划掉。然后重启magic
然后再按照刚才的步骤,点击安装–>下一步
然后弹出选择方式,就选择安装到系统分区
然后显示all done就是代表安装完成
纠错处理:显示installation failed
这种情况是因为您下载的是最新版的模拟器,需要在设置中打开读写权限 ...