吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 26959|回复: 102
收起左侧

[Android 原创] JEB动态调试Smali-真机/模拟器(详细,新手必看)

    [复制链接]
夜步城 发表于 2022-3-6 14:45
本帖最后由 夜步城 于 2022-3-7 18:34 编辑



一、环境
1、自行安装adb或者SDK(其实也用的里面的adb功能,SDK太大了,所以建议非安卓开发用户只安装adb就行了),adb安装教程网上很多,考验自己的自学能力!
主要用adb将PC与真机/模拟器连接起来进行调试!
2、自行安装配置JAVA环境




二、工具
1、真机:一般安卓机即可(不关心root与否),这里我使用的是Redmi K40(Android 11)
2、数据线1条
3、Win7及以上 PC机


三、软件
1、PC版模拟器:任意厂家安卓模拟器(这里我使用的是MuMu模拟器
2、安卓版模拟器:VMOS(会员版)
3、PC版安卓修改器:AndroidKiller_v1.3.1(这个主要用来修改软件AndroidManifest.xml里可调试权限android:debuggable="true"),下载地址
4、MT管理器(实现同第3条修改,但是需要会员
5、NP管理器(无需会员实现第3条修改)
6、主角:JEB   版本:jeb-demo-4.2.0
7、待分析APP--debug.apk:https://wwi.lanzoup.com/iGJzi012bscf

四、JEB安装及激活
1、下载地址:https://pan.baidu.com/s/168RjxkVL655ydz0Fwt2Kvw?pwd=vbup
2、解压压缩包,再解压jeb.zip后,将fix文件夹下的jeb.jar复制并替换jeb\bin\app文件夹下。

J[V@P@ZOX57K~79RFVT{Y}L.png
3、激活:移动好后双击jeb/jeb_wincon.bat打开jeb,此时会弹出激活注册界面,选择Manual Key Genaration,复制许可证数据。如果双击jeb_wincon.bat不能打开jeb,需要检查一下自己java环境是否配置好!

2.jpg 3.jpg
得到许可证数据后,复制下面Python代码到python编译器里,推荐https://tool.lu/coderunner/  这个在线代码网站上运行,代码格式选择Python,把许可证数据粘贴到
[Python] 纯文本查看 复制代码
1
licdata = ""
的引号里,运行后即可得到KEY值。输入到上图的许可证密匙后即可激活JEB
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#[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...")

4.png


4、设置中文:在菜单栏里Edit->Language->中文(中文),关闭软件重新打开即可为中文界面。



五、导入调试APP
1、在导入前,用第三步中的安卓修改器,修改一下AndroidManifest.xml里可调试权限android:debuggable="true"
5.jpg
编译后签名APP,把APP导入到JEB中,直接默认配置,点确定
6.png
当出现这个弹框时,选择“是”
7.png
然后JEB就加载好了APP,主要用到了下面圈出来的一些功能!
8.png






实用技巧
112.jpg 18.png
如果要查看的代码太长,无法看到后面的代码,你会发现这个JEB竟然没有横向滑条??怎么办?有办法,按住shift键+鼠标滚轮,即可代替横向滑条前后查看了,你试试,回来会感谢我的





调试时需要在一些代码处下断点,快捷键是Ctrl+B,如本次需要调试的APP下断点处为
9.png



六、实战调试
1、真机调试
把debug.apk安装到安卓机上,这里我使用的是Redmi K40(Android 11),安装后打开APP,当输入正确的密码后下面标签2显示“破解成功”,当然,我这个APP有bug,即使输入正确密码123456也会显示“破解失败”哈哈
10.jpg
然后手机里面打开设置,对着安卓版本狂点几次打开“开发者模式”,然后在开发者模式里面打开“USB调试”
11.jpg
好了,现在用数据线把手机和电脑连接起来,当弹出“是否允许电脑调试手机”之类的提示一定要选择允许!!
此时手机打开debug.apk这个APP,然后在JEB中点那个绿色瓢虫开始调试,当出现下面这个弹框时说明已经连接好了,这个时候选择“附上
12.png 13.png 出现这些信息时说明已经开始调试了
但是有时候会出现下面这个情况
14.png 这是因为没有打开APP的缘故,有两个办法解决,方法一是手动打开调试的安卓APP,方法二用adb shell am start -D -n 包名/主入口点Activity来启动调试APP

好了,接下来我们随便输入数据,让JEB能断下来!
15.png 111.jpg 但是在调试过程中,我手机没有root,修改数值不起作用,root的朋友可以试试。但即使不能修改,也可以通过调试来观察代码的走向,来辅助静态修改!!

2、模拟器调试
其实模拟器和真机调试过程一模一样,你会真机了就会模拟器了,无非就是JEB连接模拟器的问题。
如我用的MuMu模拟器,首先打开cmd命令框,输入adb connect 127.0.0.1:7555,即可连接成功。然后要打开模拟器的开发者模式下的USB调试权限!其他PC版模拟器类似!只是端口不一样,如这里端口为7555
image.png
这里总结了一些常用的PC版模拟器连接方法!其他的自行搜索!
MuMu模拟器:adb connect 127.0.0.1:7555
夜神模拟器:adb connect 127.0.0.1:62001
雷电模拟器:adb connect 127.0.0.1:5555
逍遥安卓模拟器:adb connect 127.0.0.1:21503
天天模拟器:adb connect 127.0.0.1:6555
海马玩模拟器:adb connect 127.0.0.1:53001

3、VMOS调试:它是手机上的安卓模拟器,创建好模拟器后打开虚拟机设置,选择“高玩设置”(睾wan??hh,没事没事,咱们继续),勾选上“网络ADB”即可用adb连接VMOS了,调试过程同真机调试部分。不过VMOS是需要收费的!
19.jpg 20.jpg


七、完结
        以上就是用JEB进行Smali动态调试的全部过程,相对于Android Studio动态Smali调试来说,我认为JEB更加方便,无需其他额外的插件,同时他的劣势也很明显,工程大了容易卡死,有时调试断点断不下来,还是比较轻量化的一个工具吧!同时他的smali转java代码优化方面也需要提高,有些代码参数看的一头雾水,不过我也没有资格说什么优缺点,开发者才是巨佬。总的来说JEB还是一个非常优秀的工具了,当然,他的价格也不菲啊!一个月好多刀呢   

免费评分

参与人数 23威望 +1 吾爱币 +42 热心值 +22 收起 理由
桐姥爷 + 1 + 1 谢谢@Thanks!
wycshmily + 1 + 1 热心回复!
xhzy + 1 + 1 谢谢@Thanks!
linklin + 1 + 1 谢谢@Thanks!
guo15049434245 + 1 + 1 热心回复!
weixu + 1 + 1 谢谢@Thanks!
wasd3152 + 1 + 1 谢谢@Thanks!
xzzj + 1 热心回复!
uc359599080 + 1 我很赞同!
TeslaLee + 1 + 1 我很赞同!
一哥 + 1 + 1 我很赞同!
Chenda1 + 1 + 1 感谢分享 ,教程简单易懂
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
玩世不攻 + 2 + 1 谢谢@Thanks!
chinacore_zhao + 1 + 1 用心讨论,共获提升!
wangyftr + 1 + 1 我很赞同!
开心的一逼 + 1 + 1 热心回复!
hehelovehehe + 1 + 1 用心讨论,共获提升!
悠然地2012 + 1 热心回复!
笙若 + 1 + 1 谢谢@Thanks!
way226510 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
北辰没有林安 + 1 + 1 热心回复!
qianshang666 + 2 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

KGTDM 发表于 2024-8-29 09:40
这是 Python3 的代码,刚学,顺手就改了下

import struct, binascii, time

RC4_Key2_str = 'Eg\xa2\x99_\x83\xf1\x10'
RC4_Key2_bytes = RC4_Key2_str.encode('latin-1')

# RC4_Key2_str = '4567A2995F83F110'
# RC4_Key2_bytes = bytes.fromhex(RC4_Key2_str)

def rc4(key, in_data):
    buf = ""
    s = list(range(256))
    k = (list(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(in_data)):
        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] ^ in_data[x])
    return buf

def parse_post(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

    assert CRC == binascii.crc32(buf[8:]) & 0xFFFFFFFF
    return info

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

def keygen_sn(license_serial, machine_id):
    mhi, mlo = long2_int(machine_id)
    lhi, llo = long2_int(license_serial)
    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 decode():
    lic_data = '请填写许可证数据'
    buf = bytes.fromhex(lic_data)

    rc4r = rc4(buf[:8] + RC4_Key2_bytes, buf[8:])

    i = parse_post(rc4r.encode('latin1'))

    sn = keygen_sn(i[3], i[4])
    print(f"JEB License Key: {sn}")

decode()
418 发表于 2022-11-18 22:00
418 发表于 2022-11-18 21:49
jeb报错什么什么\Launcher not found打不开,我用别的地方下载的就不会报错

解决了,我把它移到别的目录就可以打开了,应该是文件路径名的问题
 楼主| 夜步城 发表于 2022-3-6 20:09
1123791755 发表于 2022-3-6 20:04
老哥python代码运行不了

可能是你的python缺少库,你可以直接把代码复制到https://tool.lu/coderunner/  这个在线代码网站上运行,代码格式选择Python
Gacker719 发表于 2022-3-6 15:46
        用心讨论,共获提升!
v5le0n9 发表于 2022-3-6 16:32
我想问下到底怎么才能真机连上电脑,我的是Redmi K30,网上教程也找过了就是连不上,在电脑安装小米助手也连不上,楼主求解
 楼主| 夜步城 发表于 2022-3-6 16:53
v5le0n9 发表于 2022-3-6 16:32
我想问下到底怎么才能真机连上电脑,我的是Redmi K30,网上教程也找过了就是连不上,在电脑安装小米助手也 ...

你手机连电脑上可以进行数据传输吗?还有打开USB调试权限,第一次连接电脑时手机会弹出允许调试确认界面
sky2021 发表于 2022-3-6 16:57
非常详细,感谢分享,正需要
q5269174 发表于 2022-3-6 17:29
很细致的讲解,受教,研究下
v5le0n9 发表于 2022-3-6 17:36
夜步城 发表于 2022-3-6 16:53
你手机连电脑上可以进行数据传输吗?还有打开USB调试权限,第一次连接电脑时手机会弹出允许调试确认界面

我知道了,是数据线的问题
 楼主| 夜步城 发表于 2022-3-6 17:39
v5le0n9 发表于 2022-3-6 17:36
我知道了,是数据线的问题

哈哈,能发现问题就行,我一开始想的是不是数据线不行,因为之前也遇到过类似情况
1123791755 发表于 2022-3-6 20:04
老哥python代码运行不了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-1 23:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表