正己 发表于 2022-11-17 23:10

《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩

本帖最后由 正己 于 2023-10-10 18:48 编辑

https://www.bilibili.com/video/BV1hg411q7dj/?spm_id_from=333.788&vd_source=6dde16dc6479f00694baaf73a2225452
# 一、课程目标
---
1.配置java环境
2.了解并掌握动态调试
3.了解并掌握Log插桩

# 二、工具
---

1.教程Demo
2.MT管理器/NP管理器
3.jeb
4.雷电模拟器
5.XappDebug

# 三、课程内容
---

## 1.配置java环境

1.下载jdk文件并安装(课件里有)
2.配置java环境
ps:在视频里面环境配置只配置了一个JAVA_HOME
还有一个Path和CLASSPATH,请参考这篇文档,写得很详细,配置完后记得cmd窗口输入java验证一下
(https://blog.csdn.net/xhmico/article/details/122390181)

## 2.什么是动态调试

动态调试是指自带的调试器跟踪自己软件的运行,可以在调试的过程中知道参数或者局部变量的值以及履清代码运行的先后顺序。多用于爆破注册码(CTF必备技能)

## 3.动态调试步骤

### 1.修改debug权限
方法一:在AndroidManifest.xml里添加可调试权限
```xml
android:debuggable="true"
```

方法二:XappDebug模块hook对应的app

项目地址

(https://github.com/Palatis/XAppDebug)

方法三:Magisk命令(重启失效)

```
1.adb shell #adb进入命令行模式
   
2.su #切换至超级用户
   
3.magisk resetprop ro.debuggable 1
   
4.stop;start; #一定要通过该方式重启
```

方法四:刷入MagiskHide Props Config模块(永久有效,但我这两台手机都不行,哭死,呜呜呜)

一般来说,在4选项中如果有ro.debuggable那就直接修改
没有的话就选5

修改ro.debuggable的值为1


### 2.端口转发以及开启adb权限


版本号点击七次开启开发者模式并开启adb调试权限

夜神模拟器:adb connect 127.0.0.1:62001

### 3.下段点


ctrl+b下断点

### 4.debug模式启动


```
adb shell am start -D -n com.zj.wuaipojie/.ui.MainActivity
```
adb shell am start -D -n
adb shell am start -D -n 包名/类名
am start -n 表示启动一个activity
am start -D 表示将应用设置为可调试模式

### 5.Jeb附加调试进程



激活jeb

在线python运行
(https://tool.lu/coderunner/)

算号代码:
```python
#https://bbs.pediy.com/
#!/usr/bin/env python
import os, sys, struct, time, binascii, hashlib

RC4_Key2= 'Eg\xa2\x99_\x83\xf1\x10'

def rc4(Key, inData):
    Buf = ""
    S = range(256)
    K = (map(lambda x:ord(x), Key) * (256 / len(Key) + 1))[:256]
    j = 0
    for i in range(256):
      j = (S + K + j) % 256
      S, S = S, S
    i, j = 0, 0
    for x in range(len(inData)):
      i = (i + 1) % 256
      j = (j + S) % 256
      S, S = S, S
      Buf += chr(S[(S + S) % 256] ^ ord(inData))
    return Buf

def Long2Int(longdata):
    lo = longdata & 0xFFFFFFFF
    hi = (longdata >> 32) & 0x7FFFFFFF
    return hi, lo

def KeygenSN(LicenseSerial, MachineID):
    mhi, mlo = Long2Int(MachineID)
    lhi, llo = Long2Int(LicenseSerial)
    hi_Key = (mhi - lhi + 0x55667788) & 0x7FFFFFFF
    lo_Key = (mlo + llo + 0x11223344) & 0xFFFFFFFF
    Z0, = struct.unpack('<Q', struct.pack('<LL', lo_Key, hi_Key))
    Z1 = int(time.time()) ^ 0x56739ACD
    s = sum(map(lambda x:int(x, 16), "%x" % Z1)) % 10
    return "%dZ%d%d" % (Z0, Z1, s)

def ParsePost(buf):
    Info = struct.unpack('<3L2Q4LQ3L', buf[:0x40])
    flag, CRC, UserSerial, LicenseSerial, MachineID, build_type, \
          Ver_Major, Ver_Minor, Ver_Buildid, Ver_Timestamp, \
          TimeOffset, Kclass, Random2 = Info
    SysInfoData = buf
    assert CRC == binascii.crc32(buf) & 0xFFFFFFFF
    return Info, SysInfoData

def DecodeRc4Str(buf):
    buf = buf.decode('hex')
    i, s = ParsePost(rc4(buf[:8] + RC4_Key2, buf))
    return i, s

def GetJebLicenseKey():
    licdata = ""
    if licdata:
      i, MachineID = DecodeRc4Str(licdata)
      SN = KeygenSN(i, i)
      print "JEB License Key:", SN
      return SN

GetJebLicenseKey()
raw_input("Enter to Exit...")

```

快捷键:
^F6进入方法
F6跳过方法
F7从方法中跳出来
R运行到光标处

## 3.Log插桩


定义:Log插桩指的是反编译APK文件时,在对应的smali文件里,添加相应的smali代码,将程序中的关键信息,以log日志的形式进行输出。

调用命令
```smali

invoke-static {对应寄存器}, Lcom/mtools/LogUtils;->v(Ljava/lang/Object;)V

```



#四、课后小作业
---
动态调试获取注册码
https://wwl.lanzoub.com/iZ0tt0fzsbpa
作业提交地址:
《安卓逆向这档事》第五节课后小作业贴
https://www.52pojie.cn/thread-1714883-1-1.html
(出处: 吾爱破解论坛)


# 五、答疑
---

关于jeb动态调试没有进程的问题,请看下面顶置的评论,替换个新的adb

关于永久debug的问题,可以参考zzzznl的方法(具体楼层在224)
关于MagiskHidePropsConfig设置ro.debuggable,我运气比较好,雷电模拟器中设置成功了几次,操作如下:
1.cmd中adb shell
2.su获取root权限
3.props进入设置,其后是大佬教程中的步骤,注意不要在4中设置,哪怕4中有也在5中新建一下,因为4中设置无法选择设置的时期,而5中可以
4.重新进入5中设置的ro.debuggable,这时候可以选择设置该参数的时间,我选的延时Delay,Boot Completed之后3秒(随便设的,没测试其他值)

5.重启n次之后进入模拟器,检查参数

所以我觉得存在一种可能,模块虽然起作用了,但很快又被模拟器重新设回去了,选择较晚期进行设置,存在一点设置成功的可能,大佬可以参考下

# 六、视频及课件地址
---


[百度云](https://pan.baidu.com/s/1cFWTLn14jeWfpXxlx3syYw?pwd=nqu9)
[阿里云](https://www.aliyundrive.com/s/TJoKMK6du6x)
[哔哩哔哩](https://www.bilibili.com/video/BV1wT411N7sV/?spm_id_from=333.788&vd_source=6dde16dc6479f00694baaf73a2225452)
PS:解压密码都是52pj,阿里云由于不能分享压缩包,所以下载exe文件,双击自解压

# 七、其他章节
---
[《安卓逆向这档事》一、模拟器环境搭建](https://www.52pojie.cn/thread-1695141-1-1.html)
[《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修改](https://www.52pojie.cn/thread-1695796-1-1.html)
[《安卓逆向这档事》三、初识smail,vip终结者](https://www.52pojie.cn/thread-1701353-1-1.html)
[《安卓逆向这档事》四、恭喜你获得广告&弹窗静默卡](https://www.52pojie.cn/thread-1706691-1-1.html)
# 八、参考文档
---
(https://blog.csdn.net/jinmie0193/article/details/111355867)
(https://www.52pojie.cn/thread-411454-1-1.html)
(https://www.52pojie.cn/thread-1598242-1-1.html)

lz0618 发表于 2022-11-19 15:00

本帖最后由 lz0618 于 2022-11-19 15:06 编辑

找到原因了,是adb版本问题,原来adb版本是1.0.31的,是雷电模拟器下的,我其他地方的adb大多也是这个版本,后来我换成1.0.41版本,就正常了,需要注意的是,雷电模拟器下的adb版本也要换成同一个版本1.0.41,否则可能连模拟器都发现不了!!!!



adb替换三个文件即可:



另外,换成新的adb版本,有时会发现有两个模拟器同时online,这时在模拟器上启动调试的app的命令加一个-s参数:

C:\Users\lizhong>adb -s emulator-5556 shell am start -D -n com.zj.wuaipojie/com.zj.wuaipojie.ui.MainActivity
Starting: Intent { cmp=com.zj.wuaipojie/.ui.MainActivity }

-s后面的参数“emulator-5556”是通过adb devices命令查出来的:

c:\>adb devices
List of devices attached
emulator-5556   device

大家都安装的一样的东西,难道你们都不出问题吗?好奇怪啊

梦ll晨 发表于 2023-2-13 13:34



在这里再说一下踩坑的原因和解决方案

1. 关于jeb搜不到附加进程
最开始用jeb调试的时候用的真机,有adb的信息,但是找不到进程,原因就是我直接把雷电模拟器的adb拿了过来用,后来换了adb解决了(https://dl.google.com/android/repository/platform-tools_r34.0.0-windows.zip)


2.关于jeb不显示寄存器的问题
* 同样用的真机(小米9),只有一个this其它寄存器的值一概不显示,后来自己解决发现了jeb的原贴,感兴趣可以看看(https://www.pnfsoftware.com/blog/debugging-android-apps-on-android-pie-and-above/)
* 原贴中给了两个访问一个是利用低版本机器,还有一个是利用命令改配置(经过测试第二种方式没有成功)
* 后来换了同事的安卓的的手机,并且没有用jeb调试,而是用jadx-gui,成功了,但是jeb依旧失败
* 换模拟器,jadx-gui成功,jeb依旧失败
* 最后解决这个问题,一开始用的是正己给的那个(下载下来就可以用,没有提示让注册什么的),直接就用了导致的问题,于是去(https://www.52pojie.cn/forum.php?mod=viewthread&tid=1598242&highlight=jeb)这个帖子里面重下了jeb并且手动激活了一下,重新测试,成功

正己 发表于 2022-11-17 23:11

剪完视频感觉动态调试讲的很拉垮,本来想用测试机再讲一遍,结果今晚测试机打不开了,明天再刷一遍系统{:301_972:}

lwt198888 发表于 2023-12-5 16:05

本帖最后由 lwt198888 于 2023-12-5 17:14 编辑


昨晚附加调试是没有进程
今天下断后调试,直接就是不显示东西,电脑重启了,还是这样
adb用的是最新版,cmd用的adb指令也是显示找到模拟器,并且连接上,右边雷电模拟器显示也是连接上了不是么?

正己 发表于 2022-11-18 15:13

双眼皮的微笑 发表于 2022-11-18 11:59
终于等到你了 家里封了一周了 每天都要上来看看,话说b站怎么还没上传啊 迫不及待,我币都准备好了。{:301_ ...

上传了哦{:301_997:}

luchao20011028 发表于 2023-8-25 15:51

按步骤运行的,第一次成功了。第二天再想温习一下,出错了。在下好断点想要附加进程时,出现如图画面(模拟器那边已出现等待DEBUG的画面)。看论坛上说是ADB版本的问题,也下载了1.0.41,替换了相应位置的文件,可症状如旧。是卡在哪了?

Huibq120 发表于 2022-11-23 20:49

14736813183 发表于 2022-11-21 16:15
自己打包的日志打桩文件,需要的来取呀
链接:https://pan.baidu.com/s/1efJiolQN5c6ZRCpbO5J_eg?pwd=earr

感谢,我下载了最早的,没有&#128557;

正己 发表于 2024-1-17 18:12

ofuago 发表于 2024-1-17 17:07
确实是没有vm局部变量,才没有放截图。
目前用的是第四次课程的demo.apk,用MT管理器修改AndroidManifes ...

换一个版本的jeb试试

正己 发表于 2023-10-21 20:22

czb20020808 发表于 2023-10-21 19:35
佬 Jeb附上进程操作中 模拟器提示Shell已被拒绝超级用户权限 是怎么个情况啊

magisk里看看有没有给shell权限

yuanyxh 发表于 2022-11-17 23:17

我也会jvav啊{:1_918:}

正己 发表于 2022-11-17 23:19

yuanyxh 发表于 2022-11-17 23:17
我也会jvav啊

简大仙教教我{:301_974:}

侃遍天下无二人 发表于 2022-11-17 23:20

本帖最后由 侃遍天下无二人 于 2022-11-17 23:21 编辑

可以用Android Studio调试吗,JEB感觉地位有些尴尬,对我来说既没jadx舒服,也没Android Studio常用,关键还是个付费软件,所以平时就不装

lin2lin3lin5 发表于 2022-11-17 23:21

感谢楼主分享。期待已久,持续追更ing

甜萝 发表于 2022-11-17 23:21

我也会java啊 之前略学过一点点 :lol

fengwolf3 发表于 2022-11-17 23:25

终于等到大佬更新了

ycj255999 发表于 2022-11-17 23:28

向大佬学习

y21 发表于 2022-11-17 23:38

终于又更新啦!!nice
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩