前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AndroidNativeEmu模拟执行计算出某电商App sign

AndroidNativeEmu模拟执行计算出某电商App sign

原创
作者头像
fenfei331
修改2021-01-04 11:17:22
1.4K0
修改2021-01-04 11:17:22
举报
文章被收录于专栏:奋飞安全奋飞安全

一、目标

这几天写代码写的很爽,因为经过几天没日没夜的调试,终于成功的把某电商App的sign用 AndroidNativeEmu 跑出来了,填了无数的坑,跑出正确结果的那一刻,内牛满面呀,心里充满了对 AeonLucid 大神的敬意,请收下我的膝盖 https://github.com/AeonLucid/AndroidNativeEmu,从大神的介绍里面看应该是荷兰人。

其实算出结果并不重要, 填坑、调试并修改原工程 最终跑出sign的过程才是最重要的。没有人告诉我们牛顿发现万有引力定律时的思考过程,当然,牛顿可以慷慨地把他的思考结果告诉我们,但是,他那可以点石成金的“金手指”却没有教给我们。所以这里插播一个广告: 我预计会花2-3周的时间,把这次从原工程到跑出sign的过程详细到每一步的所思所想和解决方法完整的过程发布出来,绝对是全网唯一一个AndroidNativeEmu实操教程,仅会发布至 "奋飞的朋友们" 知识星球,这份教程一定会让你物超所值

请注意,要学习这个AndroidNativeEmu实例教程有两个前置条件:

1、Android编程入门,起码能写个Hello World;

2、能读懂 AndroidNativeEmu使用指南并跑通例子代码

否则强练九阴真经会走火入魔的。 (= ̄ω ̄=) 

以下是正文……

二、分析

李老板: 奋飞呀,你不是说某电商App的签名已经搞定了吗?

奋飞: 对呀,连上手机签名,就可以正常拿到数据了。

李老板从裤兜里掏出了iphone 12pro, 奋飞: ( ̄ε(# ̄) (其实iPhone连手机签名奋飞有更稳定成熟的方案,以后的文章介绍)

奋飞只好默默的掏出了AndroidNativeEmu,跑起来,Duang......,不出意外,程序挂了

jdsignrun.png
jdsignrun.png

这个问题还好,把BitmapkitUtils类补上就行了

代码语言:txt
复制
class BitmapkitUtils(metaclass=JavaClassDef, jvm_name='com/jingdong/common/utils/BitmapkitUtils',jvm_fields=[JavaFieldDef("a", "Landroid/app/Application;", True, Application())]):

    def __init__(self):
        pass

    @java_method_def(name='a', signature='([Ljava/lang/String;)Ljava/lang/String;', native=True)
    def a(self, mu,str):
        logger.info("calll BitmapKitUtils a %s" % str)
        pass

    @java_method_def(name='encodeJni', signature='([BZ)[B', native=True)
    def encodeJni(self, mu):
        pass

    @java_method_def(
        name='getSignFromJni',
        args_list=['jobject',"jstring","jstring","jstring","jstring","jstring"],
        signature='(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;',
        native=True)
    def getSignFromJni(self, mu):
        pass

    @java_method_def(name='getstring', signature='(Ljava/lang/String;)Ljava/lang/String;', native=True)
    def getstring(self, mu):
        pass

其他还有一堆坑都给填上,这里就不详述了,星球里下周发的详细教程 见。

成功算出sign

runrc.png
runrc.png

算完了,总不能复制过去吧, 这里我们参照 某右协议分析(三),通过Flask起个web Server来搞

代码语言:txt
复制
app = Flask(__name__)
@app.route('/getSignFromJni', methods=['POST']) # 数据加密
def getSignFromJni():
    global emulator
    global lib_module

    str = request.form.get('str')
    str2 = request.form.get('str2')
    str3 = request.form.get('str3')
    str4 = request.form.get('str4')
    str5 = request.form.get('str5')

    activity_Th = ActivityThread()
    bit_Utils = BitmapkitUtils()
    result = emulator.call_symbol(lib_module, 'Java_com_jingdong_common_utils_BitmapkitUtils_getSignFromJni',emulator.java_vm.jni_env.address_ptr,0x00, activity_Th.getSystemContext(emulator), str, str2,str3, str4,str5)

    return result.toString(emulator)

好了,再接上上次我们写的send.go,这次搜索一下 “小米”

sendrc.png
sendrc.png

结果正常, 收工。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、目标
  • 二、分析
相关产品与服务
应用安全开发
应用安全开发(Application Security Development,下文中也叫 Xcheck)为您提供优质的代码分析服务。Xcheck 凭借优秀的算法和工程实现,能在极低的误报率和漏报率前提下,以极快的速度发现代码中存在的安全漏洞。Xcheck 采用私有化部署的模式,所以产品使用的整个生命周期,源码都不会流出公司网络,杜绝源码泄露风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档