zoukankan      html  css  js  c++  java
  • apktool + eclipse 动态调试APK

    用了会AndBug,尽管挺强大的可是作为习惯了OD。EDB作为动态调试工具的人,自然有些不习惯,于是乎寻求新的动态调试解决方式。但大多数都是NetBeans + apktool。想着还得多下一个IDE就各种烦躁,还是去寻求Eclipse的组合吧。


    http://code.google.com/p/android-apktool/wiki/SmaliDebugging

    找到apktool的官网,看到有能够实现动态调试。

    能够在反编译和回编的时候通过设置參数给目标APK中的manifest文件里增加android:debuggable="true",,同一时候为了结合Eclipse。之后也会自己主动把.smali后缀改为了.java。这样就能够用来调试了。

    当然,别忘了回编后还须要签名等。于是自己写了个简易的脚本:

    '''
    Created on 2014-5-28
    
    @author: Xbalien
    '''
    import os
    import sys
    import subprocess
    
    class APKdebugger(object):
        def unpackaging(self, apk_path):
            print 'Start Unpackaging...'
            subprocess.call(['apktool_2.0.0b9.jar','d','-d',apk_path],shell=True)
    
        def packaging(self, file_path):
            print 'Start Packaging...'
            subprocess.call(['apktool_2.0.0b9.jar','b','-d',file_path],shell=True)
    
        def signer(self, unsigned_path):
            print 'Start Signing...'
            signer_comm=['jarsigner','-verbose','-keystore','key','-digestalg','SHA1','-sigalg', 'MD5withRSA' ,'-signedjar','signed.apk']
            signer_comm += [unsigned_path,'key']
            p = subprocess.Popen(signer_comm,stdin=subprocess.PIPE,stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True)
            p.communicate(input='key123456')
            p.wait()
    
        def zipalign(self, outapk_path):
            subprocess.call(['zipalign','-v','4','signed.apk',outapk_path],shell=True)
    
    
    if __name__ == '__main__':
        if len(sys.argv) >1:
            print 'Start Create APKdebugger...'
            apk_path = sys.argv[1]
            file_path = apk_path[:-4]
            unsigned_path = './'+file_path+'/dist/'+apk_path
            outapk_path = file_path+'//'+apk_path
            apk_debugger = APKdebugger()
            apk_debugger.unpackaging(apk_path)
            apk_debugger.packaging(file_path)   
            apk_debugger.signer(unsigned_path)
            apk_debugger.zipalign(outapk_path)
        else: print 'useage:main.py apk_name'

    脚本处理好之后。apk也就生成了。之后将其安装到手机上。点击执行。这时候能够通过DDMS查看



    这时候打开Eclipse,新建javaproject。增加源码(反编译代码smali文件夹)



    之后我们能够打开个文件下断点


    接着设置调试配置文件,选定远程调试以及相应port就可以開始调试


    之后点击debug。这时候能够在手机上開始了点击。到对应断点的时候就断下来了


    之后就能够愉悦的单步调试了

  • 相关阅读:
    《Dubbo》接入与调用流程
    SpringBoot自定义配置实现与解析
    Docker使用笔记记录
    Elasticsearch(一):介绍与安装
    索引的建立与使用规范
    RocketMQ(一):介绍与安装
    NETCORE使用MINIO的PRESIGNEDPUTOBJECTASYNC方法,实现通过浏览器直接上传图片到MINIO服务器
    Minio 使用.NET + Vue 实现断点续传、秒传
    VS Code中小程序与Vue常用插件合集(前端合集)
    [瞎想笔记] 浅浅浅谈期望
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6790456.html
Copyright © 2011-2022 走看看