- 博客(50)
- 资源 (5)
- 收藏
- 关注
原创 Native开发与逆向第六篇 -字符串加密与hook
Module.getExportByName 通过导出函数名hook,当然也可以计算地址hook。hook StrToHex 和 HexToStr 这两个函数打印字符串。写一个简单的字符串加密处理,将字符串字符转成ASCII十六进制值。转换后:48656C6C6F2066726F6D20432B2B。运行打印结果:可以看到参数1就是明文字符串。我这里还顺带hook打印了sp 和 x1。明文:Hello from C++找到这两个函数的导出函数名。
2024-08-31 15:43:03 663
原创 Native开发与逆向第四篇 - hook JNI函数GetStringUTFChars
通过GetStringUTFChars 获取java层传入的字符串参数。目标hook GetStringUTFChars 打印字符串。运行打印结果:参数和返回值都正常打印出字符串。
2024-08-31 09:37:39 348
原创 Native开发与逆向第三篇 - hook JNI函数NewStringUTF
Pixel 3a::com.mycode.nativehello ]-> env : 0x7d44041250 param1 Hello from C++ , 这是动态注册。addr_NewStringUTF retval : Hello from C++ , 这是动态注册。目标是hook NewStringUTF 打印字符串。运行打印结果:参数和返回值都正常打印出来字符串。
2024-08-30 18:08:27 455
原创 Native开发与逆向第二篇 - 动态注册函数逆向
前面JNI_OnLoad里面调了两次sub_6454 ,第四个参数是注册的方法数量,也就是NativeUtils类注册了13个方法,AVLA类注册了32个方法。sub_6454 的三个参数就是函数的JNINativeMethod结构体,里面就是动态注册函数的方法名,方法签名和对应的实现的函数地址。在方法名、方法签名等没有处理的情况下,通过静态分析也能很清楚的看到动态注册的对应函数。同样的 off_24190 是32个动态注册的函数,这里截图只截取部分。直接找到JNI_OnLoad。类名没处理,直接是明文。
2024-08-30 12:46:27 418
原创 adb install
adb install -d 允许进行降级安装,也就是安装的比手机上带的版本低。adb install -r 替换已存在的应用程序,也就是说强制安装。adb install -g 为应用程序授予所有运行时的权限。adb install -s 把应用程序安装到sd卡上。adb install -l 锁定该应用程序。adb install -t 允许测试包。
2024-08-24 16:46:59 284
原创 Google 广告id流程分析
搜索上面的接口 “com.google.android.gms.ads.identifier.internal.IAdvertisingIdListener”adb shell pm path com.google.android.gms 搜索安装包路径,然后包apk pull出来分析。这个包也只是提供了一个获取的接口,实际生成不在这个包里面。
2024-08-24 15:44:53 528
原创 admob 广告分析
1、测试广告集成,官方文档 https://developers.google.com/admob/android/quick-start?4、Layout Inspector查看布局。2、广告集成,集成测试激励广告。3、查看广告activity。
2024-08-20 22:05:33 168
原创 Android逆向题解-攻防世界-Ph0en1x-100
主要代码是if 那个判断,getFlag取字符串用getSecret加密,和输入字符串encrypt加密后再getSecret加密,进行比较,两边同样都是getSecret加密,那比较可以简化成this.getFlag() == this.encrypt(s)。也就是输入字符经过encrypt加密后等于getFlag的字符串即可。直接上objection 获取到getFlag的返回值:ek。qanqntfg^E`hq|,每个字符+1;ida看下encrypt 的实现。
2024-08-20 15:40:06 632
原创 Android逆向题解-攻防世界easyso
还原过程就是指定的字符串“f72c5a36569418a20907b55be5bf95ad”先单双位互换得到“7fc2a5636549812a90705bb55efb59da”直接反编译看伪代码,代码比较简单直接手撕即可,循环走一两遍就可以知道整个逻辑了。然后单双位互换,0,1互换,2,3互换,4,5互换。核心逻辑都在so里面的CheckString函数。整理逻辑流程就是输入字符串前16位与后16位互换。然后前16位与后16位互换得到。最后与指定字符串比较。
2024-08-19 22:50:02 375
原创 Native开发与逆向第一篇-字符串
Android studio新建一个Native C++项目。默认代码就是调用Native 方法stringFromJNI 返回一个字符串。
2024-08-19 11:35:15 508
原创 LSPosed模块开发第二篇 hook Webview
hook webview的loadUrl方法,打印webview加载的地址,修改参数将地址换成指定的url。
2024-08-18 21:49:25 418
原创 常用adb命令
adb connect :端口号:adb连接某设备(通常针对offline设备)adb disconnect :端口号 :adb断开某设备。adb pull /sdcard/two.mp4 ./ 导出视频。adb push pc文件路径 手机文件路径。adb pull 手机文件路径 pc文件路径。adb start-server:重启adb。adb kill-server:杀死adb。adb install apk路径。ctrl +c 退出录制。
2024-08-16 23:59:40 118
原创 配置frida脚本环境代码提示自动补全
https://nodejs.org/en/ 官网下载安装,无脑安装即可。在agent 下面写js 脚本就有代码提示了。
2024-08-15 23:13:14 203
原创 Android逆向题解-Illusion-难度6
注意这里有一个陷阱,CheckFlag有静态注册函数和动态注册函数,会执行动态注册的函数。s 是用户输入,s1 是加密后flag: Ku@'G_V9v(yGS。sub_1028 看着花里胡哨的,实际执行结果就是 a1/a2;代码可以直接复制到idea,调试跟着过一遍就清楚了。传入Native函数 CheckFlag。a2 == 93 只会走sub_1028。
2024-08-15 22:33:01 307
原创 Android逆向题解攻防世界-RememberOther
userName MD5之后每2位取一个值与sn比较,userName 和 sn 都是用户输入类似注册机,这和flag不沾边。直接跳过看后续成功之后是Toast打印 “md5:b3241668ecbeb19921fdac5ac1aafa69”最后flag是 YOU_KNOW_ANDROID。
2024-08-14 11:40:16 189
原创 Android逆向题解攻防世界-easy-apk
魔改码表与标准码表参照对比,将加密字符串还原成标准码表编码的字符串,再标准base64解码即可。运行结果:flag{05397c42f9b6da593a3644162d36eb01}题目比较简单,就是一个改了码表的base64编码。
2024-08-14 11:20:14 488
原创 Win10 VisualStudio 2022编译ollvm 13.x
将编译好的 clang、clang-format、clang++ 这三个文件复制到 AndroidStudio使用的NDK目录 …/toolchains/llvm/prebuilt/darwin-x86_64/bin文件夹下,存在同名文件需要替换掉。1、修改D:\androidSdk\ndk\23.2.8568313\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang 下 文件夹版本将12.0.9 修改为13.0.1。单独对函数进行混淆,效果很明显。
2024-08-13 23:36:35 1401
原创 Android逆向题解攻防世界-easyjava-难度6
纯Java实现,不涉及so, flag加密之后与指定字符串 “wigwrkaugala"比较判断,循环一个个字符加的,那可以一个个字符对应还原。jeb自动把b.b解密成“abcdefghijklmnopqrstuvwxyz”,而b.b 运行中是会变化的。另外a,b类里面有静态变量,遍历完一次需要重置恢复到初始值不然加密结果不对。加密算法就在a,b类里面,代码直接复制到idea ,枚举暴力破解。类a,b 执行过程中是变化的,执行不同次数结果是不一样的。a,b 类直接复制就行,没什么需要改的。
2024-08-13 18:22:50 250
原创 Android逆向题解-boomshakalaka-3-难度5
题目要求是玩游戏得到最高分就可以得到flag,是写到配置文件的,初始flag值看着是base编码的。玩几次之后查看配置文件数据base64解码可以看到出现了部分flag,对比上面的代码补齐字段;题目描述:play the game, get the highest score。核心代码在so里面的ControlLayer::updateScore函数。这个app 是一个cocos游戏,没有用脚本实现,纯c++实现。逻辑就是根据玩游戏的得分拼接上面函数里面的的字符串;base64解码就出来了。
2024-08-12 23:44:25 288
原创 Android逆向题解 攻防世界-人民的名义-抓捕赵德汉1-200
就是一个md5加密,密文判断是否等于"fa3733c647dca53a66cf8df953c2d539",找一个MD5在线解密的解一下就出来了结果就是:“monkey99”这个也是一个简单题,文件是一个jar,直接丢到jeb反编译。
2024-08-12 10:01:20 196
原创 Android逆向题解 攻防世界难度5- APK逆向
一眼就能看出来,没啥难度,这个难度还不如上一个难度4的题。运行结果:bc72f242a6af3857。
2024-08-11 22:55:19 195
原创 frida 和 objection
下载对应版本的frida-server ,这里下载的是 frida-server-16.2.1-android-arm64.xz。objection -N -h ip -p 端口 -g packageName explore。安装对应的frida ,frida-tools,和 objection。设备:Google pixel 3a Android 12。解压之后adb push 导入到手机运行。python版本 :python 3.9。输出指定对象中的每个字段的数据。
2024-08-10 18:15:21 437
原创 Android逆向题解 攻防世界难度4- Android2.0
注意这里的v5 不是上面计算出来的第一段的值,是上面异或之后的也就是“LN^dl” ,输出字符串也就是flag 长度是15,然后分成三段,第一段是可以整除3,第二段是除3取余=1,第三段是除3取余等于2;第二段:l{sra -------------除3余1,对应下标就是1,4,7,10,13。第一段:fgorl -------------整除3,对应的下标就是0,3,6,9,12。第三段:asoy} -------------除3余2,对应下标就是2,5,8,11,14。
2024-08-10 17:57:50 568
原创 pixel 3a 刷机和root 流程
下载地址:https://dl.google.com/dl/android/aosp/sargo-sp2a.220505.008-factory-071e368a.zip。下载地址:https://developer.android.com/studio/run/win-usb,可以直接下载或者通过Android studio下载。下载地址:https://developers.google.com/android/images。2、刷机(可选),如果下载的是手机系统对应镜像可以不用刷机。
2024-08-09 17:02:32 623
原创 xposed模块开发第二篇
被hook的示例app先写个示例app供后面hook用,示例代码尽量使用各种参数类型void demo(){ int i=20; byte[] bytes={'a','b','c'}; String s="kkk"; List<String> list=new ArrayList<>(); list.add("L"); list.add("i"); list.add("
2021-03-21 17:30:40 537 4
原创 xposed模块开发第一篇
@[TOC]安装xposed我这里用的逍遥模拟器,安装XposedInstaller_3.1.5.apk,再点一下安装Version 89,重启模拟器;这样就安装完成了。@[TOC]开发xposed模块Androidstudio新建一个工程修改AndroidManifest.xml中添加声明添加3个meta-data<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.
2021-02-27 14:52:08 1177 1
原创 Android逆向题解6-黑客精神
看代码是要先注册,先调doRegister注册,判断已注册再调workdoRegister跳到RegActivity输入内容传到saveSNsaveSN是个native方法,这里还看到了work也是native方法,就是核心代码都在so里下面来分析so直接看导出函数没找到saveSN和work,那应该是动态注册的直接看JNI_OnLoad,确实是动态注册的,n1就是initSN,n2是...
2020-04-12 15:46:19 716
原创 Android逆向题解5-HackMeNative
看雪上看到的一个https://bbs.pediy.com/thread-255468.htm运行界面代码分析public class MainActivity extends Activity implements View$OnClickListener { EditText answerText; Button submitButton; public...
2020-04-12 15:31:35 318
原创 Android逆向题解4-EasyJni
运行界面:找flag,用户输入一串字符串点击cheek确认输入是否正确代码分析判断用户输入字符串是否正确先用一个a方法加密之后传入native函数ncheck进行判定;也就是在Java层有一次加密,在native层还有一次加密;Java层的加密,类似一个换了码表的base64加密;package com.a.easyjni; public class a { priva...
2020-04-12 15:19:27 359
原创 Android逆向题解3-DDCTF-Normal
赛题背景:本挑战结合了Android, Java, C/C++,加密算法等知识点,考察了挑战者的binary逆向技术和加密算法能力。赛题描述:本题是一个app,请试分析app中隐藏的key,逆向加密算法并得到对应的秘钥。可以在app中尝试输入key,如果正确会显示“correct”,如果错误会显示“Wrong”。提 示:阅读assembly code,理解xor的加密逻辑和参数,解出答案。...
2020-04-12 15:12:26 333
原创 Android逆向题解2-bobbydylan
List item运行界面List item代码分析:调用check方法,传入参数是获取用户是输入,抛出异常就“错误”public void onClick(View arg5) { DialogInterface$OnClickListener v3 = null; try { this.b.check(this.a.get...
2020-04-12 15:05:59 255
原创 Android逆向题解1-app1
这个很简单,就是拿versionName和versionName进行异或操作就可以了,versionName和versionName在AM里面设置;protected void onCreate(Bundle arg3) { super.onCreate(arg3); this.setContentView(0x7F04001B); this.bt...
2020-04-12 14:59:15 384
原创 破解某助手刺探功能---第三篇升级版
上一篇实现的功能是通过toast打印出游戏结果,还是需要玩家按结果点击才能完成游戏。这一篇在第二篇的基础上改动升级,无论用户怎么点击或者直接不点击,最后直接验证游戏都能完成。上一篇传送门:https://blog.csdn.net/u013170888/article/details/90697458实现思路:还是和上一篇一样在access$5这里拿到服务器传过来的参数,然后处理之后得到游...
2019-08-28 13:52:27 438
原创 胡吃海喝小游戏破解
小游戏界面:这个小游戏比较简单,规则就是左边会滑动出一个食物图,需要在右边5x4的20个食物图里面找到一样的点击就算成功一次,左边滑动时间很短,反应慢的很难快速找到一样的,所以想着给它破解了无脑玩。一、先看代码找到小游戏逻辑代码部分可以先通过看log找关键字符串,然后搜索字符串去定位代码段,这样会省很多时间。log里面的信息还是很多的,根据log信息可以直接定位到具体的代码部分。重点看...
2019-05-31 17:10:45 338 3
原创 破解某助手刺探功能---第二篇smali代码实现
第一篇已经通过xposed插件实现了获取刺探小游戏结果的功能。第一篇传送门:https://blog.csdn.net/u013170888/article/details/89706546上一篇也说过了这个也是可以通过修改代码实现的,因为已经用xposed实现了,另外改smali代码也比较麻烦,就没去弄。xposed实现毕竟有一定的局限性,一般人自己用的手机都不会去装xposed,所以想着...
2019-05-30 16:00:01 537
原创 安卓高版本拦截删除短信的实现
一、实现方式:通过 AppOps 权限管理修改短信权限核心点就是setMode设置短信可写权限,详细信息不懂的可以百度AppOps。代码:public static boolean setWriteEnabled(Context arg3, boolean arg4) {int v1 = getUid(arg3);int v0 = arg4 ? 0 : 1;return setMode...
2019-05-17 14:43:39 2142
Android逆向,frida hook脚本,hook测试demo的加密字符串
2024-08-31
Android 逆向frida hook log的脚本
2024-08-31
Android native开发,实现log打印,简单的字符串加密处理
2024-08-31
frida hook jni 函数 NewStringUTF 打印参数和返回值字符串
2024-08-30
Android ndk 开发测试demo,动态注册函数的实现
2024-08-30
java base64 修改码表实现编码和解码
2024-08-21
Android逆向-frida hook 脚本- hook webview
2024-08-17
ollvm 13.x 编译后的clang , 替换ndk里面的clang 即可直接使用ollvm
2024-08-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人