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

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

2015-10-26 12:39
10184
某些情况下反编译工具无法反编译得到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行


  • 源码见:4acK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6y4j5h3&6&6c8X3q4U0k6g2)9J5c8V1c8J5j5i4N6r3L8r3!0%4c8r3W2S2k6%4u0S2L8f1!0X3f1$3#2S2L8r3W2y4k6i4c8Z5L8$3c8K6

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

    [培训]科锐逆向工程师培训第53期2025年7月8日开班!

    上传的附件:
    收藏
    免费 0
    支持
    分享
    最新回复 (13)
    雪    币: 107
    活跃值: (429)
    能力值: ( 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:a1cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6K6K9%4W2D9L8%4c8Q4x3V1k6B7j5h3c8^5i4K6u0W2k6$3W2@1i4K6u0o6i4@1f1$3i4K6V1#2i4K6R3^5i4@1f1$3i4K6W2q4i4K6W2o6i4@1f1^5i4@1p5%4i4K6R3I4i4@1f1#2i4K6W2n7i4@1u0q4
    上传的附件:
    • 1.jpg (67.31kb,111次下载)
    2015-10-26 13:42
    0
    雪    币: 7591
    活跃值: (4766)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    5
    楼主真厉害啊, 弄了个流程图工具出来
    2015-10-26 13:52
    0
    雪    币: 435
    活跃值: (1422)
    能力值: ( LV13,RANK:388 )
    在线值:
    发帖
    回帖
    粉丝
    6
    楼主可以搞成一个IDA的插件
    通用的,不单是smali,支持点其他指令集
    2015-10-26 14:16
    0
    雪    币: 1356
    活跃值: (446)
    能力值: ( LV9,RANK:180 )
    在线值:
    发帖
    回帖
    粉丝
    7
    目前还没有,主要是为了流程图的简洁,所以直接用连接线代替了,图中只有跳转指令、return和标号
    2015-10-26 14:56
    0
    雪    币: 1356
    活跃值: (446)
    能力值: ( LV9,RANK:180 )
    在线值:
    发帖
    回帖
    粉丝
    8
    多谢推荐
    2015-10-26 14:59
    0
    雪    币: 1356
    活跃值: (446)
    能力值: ( LV9,RANK:180 )
    在线值:
    发帖
    回帖
    粉丝
    9
    因为弄这个昨天开会被老板批了,说在浪费时间,没有干正事。。。。
    2015-10-26 15:02
    0
    雪    币: 335
    活跃值: (671)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    10
    可能没有把调用有关系也搞出来吧?
    如果能把函数调用层次也弄出来,就更牛。。。
    2015-10-26 15:09
    0
    雪    币: 1281
    活跃值: (1280)
    能力值: ( LV6,RANK:90 )
    在线值:
    发帖
    回帖
    粉丝
    11
    good job.
    2015-10-26 15:32
    0
    雪    币: 491
    活跃值: (5205)
    能力值: ( 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
    游客
    登录 | 注册 方可回帖
    返回