首页
社区
课程
招聘
[原创]绘制smali中方法的基本执行流程图
发表于: 2015-10-26 12:39 9976

[原创]绘制smali中方法的基本执行流程图

2015-10-26 12:39
9976
某些情况下反编译工具无法反编译得到APK java形式的代码。比如2015移动安全挑战赛MSC(第二届)第一题中的check()函数,该函数经过复杂的混淆,运用了大量的反射。想要在这种情况下分析APK,不得不看smali代码。

当然IDA可以查看smali代码中方法的执行流程图,但是有时候其显示的流程图不够简洁,比如上述提到的check()函数,IDA显示check()的执行流程非常复杂(不知道有没有什么技巧让流程图变得简洁),很难掌握程序的执行流程。这里就不贴图了。

于是自己动手写了一个工具,用于画smali中方法的执行流程图,此流程图是基于smali中的goto和if指令绘制的,采用graphviz将流程图以图片形式输出。先来张截图:


  • 图中的数字是该条指令在smali文件中的行号,从上到下,行号依次增大。
  • return指令以黄色方块标出
  • goto指令的边采用橘色
  • if指令的边跳转成功采用绿色,否则是红色,比如上图中27->39表示如果v0小于v2时,则执行27->39中间的所有指令,否则直接跳到41行


  • 源码见:https://github.com/ManyFace/DrawFlowDiagramOfSmaliMethods

    由于水平有限,上述中有什么不对的地方还望各位大大指出。如果有更好的工具,还希望不吝赐教。如果该工具能帮到你,还希望点个赞

    [招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

    上传的附件:
    收藏
    免费 0
    支持
    分享
    最新回复 (13)
    雪    币: 107
    活跃值: (404)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    2
    膜拜了.................
    2015-10-26 13:02
    0
    雪    币: 11
    活跃值: (10)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    3
    膜拜,十分给力。不知连续的基本代码是否会被合成一个代码块。
    2015-10-26 13:13
    0
    雪    币: 26
    活跃值: (10)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    4
    dex2jar作者貌似就在阿里吧,不知道题目是不是他出的,所以用不了其实蛮正常,len太长的bug未修复嘛,但是别忘了还有其他的,推荐一个jadx:https://github.com/skylot/jadx.git,效果见图
    上传的附件:
    • 1.jpg (67.31kb,111次下载)
    2015-10-26 13:42
    0
    雪    币: 6526
    活跃值: (3661)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    5
    楼主真厉害啊, 弄了个流程图工具出来
    2015-10-26 13:52
    0
    雪    币: 435
    活跃值: (1282)
    能力值: ( LV13,RANK:388 )
    在线值:
    发帖
    回帖
    粉丝
    6
    楼主可以搞成一个IDA的插件
    通用的,不单是smali,支持点其他指令集
    2015-10-26 14:16
    0
    雪    币: 1356
    活跃值: (404)
    能力值: ( LV9,RANK:180 )
    在线值:
    发帖
    回帖
    粉丝
    7
    目前还没有,主要是为了流程图的简洁,所以直接用连接线代替了,图中只有跳转指令、return和标号
    2015-10-26 14:56
    0
    雪    币: 1356
    活跃值: (404)
    能力值: ( LV9,RANK:180 )
    在线值:
    发帖
    回帖
    粉丝
    8
    多谢推荐
    2015-10-26 14:59
    0
    雪    币: 1356
    活跃值: (404)
    能力值: ( LV9,RANK:180 )
    在线值:
    发帖
    回帖
    粉丝
    9
    因为弄这个昨天开会被老板批了,说在浪费时间,没有干正事。。。。
    2015-10-26 15:02
    0
    雪    币: 335
    活跃值: (263)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    10
    可能没有把调用有关系也搞出来吧?
    如果能把函数调用层次也弄出来,就更牛。。。
    2015-10-26 15:09
    0
    雪    币: 1262
    活跃值: (760)
    能力值: ( LV6,RANK:90 )
    在线值:
    发帖
    回帖
    粉丝
    11
    good job.
    2015-10-26 15:32
    0
    雪    币: 562
    活跃值: (4347)
    能力值: ( LV3,RANK:30 )
    在线值:
    发帖
    回帖
    粉丝
    12
    顶啊,不错。楼主还真有毅力,比赛smali还原了。
    2015-10-26 17:51
    0
    雪    币: 293
    活跃值: (225)
    能力值: (RANK:250 )
    在线值:
    发帖
    回帖
    粉丝
    13
    good job~
    2015-10-27 01:40
    0
    雪    币: 118
    活跃值: (72)
    能力值: ( LV4,RANK:50 )
    在线值:
    发帖
    回帖
    粉丝
    14
    mark学习,楼主一生幸福
    2015-10-27 07:41
    0
    游客
    登录 | 注册 方可回帖
    返回
    //