安卓逆向学习—Jeb动态调试,Log插桩方法解析

工具:

1.MT管理器/NP管理器

2.jeb调试工具

3.雷电模拟器

4.XappDebug

java环境的配置:

下载好对应版本的java(版本不做要求,尽量新一点)

配置步骤:

将jdk文件放置在合适的磁盘位置(c盘或d盘)

请务必记住存放的路径位置,例如我上图所示的位置

打开任务管理器,找到环境变量

将带有jdk的路径变量添加到系统变量中

变量名为JAVA_HOME,点击确定保存即可配置成功(具体不作详细说明,请自行配置)

动态调试方法及步骤:

什么是动态调试:

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

动态调试步骤:

1.修改debug权限:

在AndroidManifest.xml里添加可调试权限

android:debuggable=”true”即可

或者另一个方法:XappDebug模块hook对应的app

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

在雷电模拟器的版本号点击七次开启开发者模式并开启adb调试权限

在系统里面将usb模块开启即可开启adb调试权限

3.在电脑端(pc)安装adb:

小编这边刚开始做完前两部就想着连接调试结果发现电脑段不存在adb,才意识到忽略了

在官网下载好任意版本的adb文件程序

然后对其进行环境配置:将下载好的adb放置一个路径内记住路径打开环境变量在系统变量的path上添加上我们刚记住的adb路径即可配置成功(由于此过程步骤简单上述介绍过了就不做详细说明)

4.下段点:

在对应的代码行ctrl+b下断点

5.debug模式启动:

在终端输入以下指令:adb shell am start -D -n <包名>/<类名>

例如:

adb shell am start -D -n com.zj.wuaipojie/.ui.MainActivity

am start -n 表示启动一个activity

am start -D 表示将应用设置为可调试模式

6.Jeb附加调试进程:

下载好对应的jeb,点开jeb_wincon.bat即可进入jeb

注意:刚下好的jeb有的版本可能需要激活

下面说一下激活步骤:

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

算号代码:(将激活keyname放入代码运行获得key即可激活)

#[url=https://bbs.pediy.com/]https://bbs.pediy.com/[/url]
#!/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[i] + K[i] + j) % 256
        S[i], S[j] = S[j], S[i]
    i, j = 0, 0
    for x in range(len(inData)):
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        Buf += chr(S[(S[j] + S[i]) % 256] ^ ord(inData[x]))
    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[0x40:]
    assert CRC == binascii.crc32(buf[8:]) & 0xFFFFFFFF
    return Info, SysInfoData
 
def DecodeRc4Str(buf):
    buf = buf.decode('hex')
    i, s = ParsePost(rc4(buf[:8] + RC4_Key2, buf[8:]))
    return i, s
 
def GetJebLicenseKey():
    licdata = ""
    if licdata:
        i, MachineID = DecodeRc4Str(licdata)
        SN = KeygenSN(i[3], i[4])
        print "JEB License Key:", SN
        return SN
 
GetJebLicenseKey()
raw_input("Enter to Exit...")

示例:

1.修改debug权限:

用mt管理器打开教程文件,在xml文件下把android:debuggable=”true”加进去保存即可

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

找到对应的app启动按钮模块即可

2.将apk文件放入jeb反编译:

我们的目的是要输入正确的密钥

在jeb打开文件,搜索:密钥错误

找到对应的输入字符串关键点并下好断点(ctrl+b)

3.启动debug并继续调试:

打开终端,输入以下指令即可连接模拟器激活debug调试

adb shell am start -D -n com.zj.wuaipojie/.ui.MainActivity

如上图所示即可成功

此时打开模拟器中的apk程序是如下画面

接着在jeb继续调试步过

我们主要关注局部变量的值的变化

返回模拟器,我们要去出发它的错误逻辑,如下所示

再回到编译解密即可发现变量值出现了我们输入的123

可以推出其是存放在p1中的

继续动调,直到看到密钥结果(为base64形式的密钥)

这便是正确的密钥结果

用Log插桩去获取寄存器的值:

定义:

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

调用命令:


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

步骤解析:

首先我们将用到大神写的日志插桩2.dex文件

将其放入共享文件中,然后添加到apk文件中(重命名为classes2.dex)

然后在上一个dex文件中插入一条命令

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

找到encodeToString部分,在下面添加指令即可,将寄存器值改为变量v0

修改完保存文件即可

保证LSPosed打开算法助手

然后在算法助手里面打开apk文件开关并启动日志log捕获按钮

然后回到算法助手界面打开日志

点击刚生成的apk文件选项

点入最新生成的log信息

即可找到正确的密钥值

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇