首页
社区
课程
招聘
[分享]发几个Android静态和动态分析的小技巧
发表于: 2014-6-13 00:07 25776

[分享]发几个Android静态和动态分析的小技巧

2014-6-13 00:07
25776

没有好的调试工具下
对dex后的smali的技巧

一、常用插代码
(如果怕影响寄存器值,可以将.locals xxx改多几个或者合适的地方,如返回前添加)
1、

const-string v7, "log.v(xx, yy);"
invoke-static {v7, v7}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
const-string v0, "Must ensure vx is Context class, then Toast.makeText(vx, xxx, 1).show();" # CharSequence对象类型
const/4 v1, 0x1 # I int类型
invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast; # p0 是一个Context
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
.class public Lcom/dataviz/dxtg/common/android/launcher/TabbedLauncherActivity;
.super Lcom/dataviz/dxtg/common/android/ApplicationActivity;

# interfaces
.implements Landroid/view/GestureDetector$OnGestureListener;
.implements Lcom/dataviz/dxtg/common/android/ar;
.implements Lcom/dataviz/dxtg/common/android/bt;
.implements Lcom/dataviz/dxtg/common/android/cs;
.implements Lcom/dataviz/dxtg/common/android/dv;
.implements Lcom/dataviz/dxtg/common/android/iap/d;
.implements Lcom/dataviz/dxtg/common/android/iap/z;
.method public c()V
.end method
.class public interface abstract Lcom/dataviz/dxtg/common/android/dv;
.super Ljava/lang/Object;


# virtual methods
.method public abstract a(Ljava/lang/String;)V
.end method

.method public abstract a(Z)V
.end method

.method public abstract c()V
.end method
Searching 7287 files for "Lcom/dataviz/dxtg/common/android/dv;->c()V"
 
D:\com.dataviz.docstogo\smali\com\dataviz\dxtg\common\android\do.smali:
   91:     invoke-interface {v0}, Lcom/dataviz/dxtg/common/android/dv;->c()V
  289:     invoke-interface {v0}, Lcom/dataviz/dxtg/common/android/dv;->c()V
 
2 matches in 1 file
.method public c()V
    .locals 1 ## .locals 1 romove desktop tab 
    const/4 v0, 0x0
    #new-instance v0, Lcom/dataviz/dxtg/common/android/bl;

    #invoke-direct {v0}, Lcom/dataviz/dxtg/common/android/bl;-><init>()V

    invoke-direct {p0, v0}, Lcom/dataviz/dxtg/common/android/launcher/TabbedLauncherActivity;->a(Landroid/support/v4/app/Fragment;)Z

    return-void
.end method
	const-string/jumbo v0, "4.001"
	const v1, 666666
	# # VFY: invalid reg type 1073801336 on iput instr (need 12)
	# # VFY:  rejecting opcode 0x59 at 0x001d
	# # 0x59 表示 iput vx,vy, field_id, 0x001d应该是 方法里偏移量,两字节一个偏移量
        iput v0, v4, Lxx/yy/clazz;->field:I
<?xml version="1.0" encoding="utf-8"?>
<fs_sr_script>
    <fs_sr_options/>
    <fs_sr_info case_sensitive="0">
        <search_string>Lcom/dataviz/dxtg/common/d/j/</search_string>
        <replace_string>Lcom/dataviz/dxtg/common/d/HttpThread_j</replace_string>
    </fs_sr_info>
    <fs_file_list_info>
        <mask>*</mask>
        <path>D:\d</path>
    </fs_file_list_info>
</fs_sr_script>
#generate a 'suggest' config for rename
d2j-init-deobf -f -o init.txt a.jar
-o 输出配置文件,这里为init.txt
-f 如果存在重写文件
a.jar 待修改的文件
d2j-jar-remap -f -c init.txt -o a-deobf.jar a.jar
-c 替换的配置文件
-o 输出文件
-f 如果存在重写文件
a.jar 待修改的文件
##  file UTF-8
# format : ? x=y
#?为大写貌似是静态吗,因为在public class InitOut里方法private void doMethod(String owner, ClassInfo.MemberInfo member, int x)有句sb.append(AccUtils.isStatic(member.access) ? "M" : "m");
#重命名包a为pa
p a=pa
#重命名类a为C000_a
c a/a=C000_a
#重命名方法名a为Ma
m a/a.a()=Ma
#重命名字段名a为Fa
f a/a.a=Fa
##  file UTF-8
##  format : pqx=y
##  
##  p is as follow:
##  a comment line config starts with '#';
##  a field or method line config starts with 'F', 'M', 'f',or 'm';
##  a class line config starts with 'C',or 'c';
##  a package line config starts with 'P',or 'p';
##  a @ line config starts with '@';
##  
##  q ?, but a space is ok

package a;
public class a
{
static String a = "Hello";
static void a() {
System.out.println(a);
}
public static void main(String[] args) {
a();
}
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (17)
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
等我有一定功力   会看懂的
2014-6-13 00:55
0
雪    币: 218
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
正在努力中,此帖等我毕业。
2014-6-13 07:47
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
第三段不错。 列举了一些。

我最近碰到的很多VEY failed 都是自己把寄存器用错了~~ 插入的时候感觉 v0没人用。也不想改local ,结果一跑就错了。

使用寄存器得小心。
2014-6-13 09:12
0
雪    币: 335
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
堆栈截图

附件 89928
http://bbs.pediy.com/attachment.php?attachmentid=89928
这个图哪儿去了?
2014-6-13 16:46
0
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
6
内容很不错,帮楼主改了一下标题,希望不要见怪~
2014-6-15 14:34
0
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
7
支持 ~
2014-6-15 22:00
0
雪    币: 546
活跃值: (1657)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
8
内容不错,一般注入代码的时候出错都是寄存器问题。
2014-6-15 22:45
0
雪    币: 341
活跃值: (85)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
mark学习
2014-6-17 15:49
0
雪    币: 381
活跃值: (140)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
10
回溯堆栈有好一点的办法,注入一个打印回调的类即可,何必要搞崩溃
上传的附件:
2014-6-17 17:29
0
雪    币: 370
活跃值: (1180)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
11
不错,学习了!
2014-6-19 21:53
0
雪    币: 27
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习了,感谢~
2014-6-20 16:58
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
不错的文章 先记下。。还不会调试
2014-6-21 16:49
0
雪    币: 19
活跃值: (213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
很好的帖子,学习下,谢谢楼主!
2014-6-22 11:40
0
雪    币: 338
活跃值: (91)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
15
嗯,这个没想过,主动获取,很好啊。。。
2014-6-26 08:14
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
挺有用的,点赞~
2014-6-27 13:30
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
只能耍赖的说一句我先收藏了,完全没有足够的功力看懂楼主的东西
2014-7-17 00:09
0
雪    币: 3542
活跃值: (239)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
感谢分享!
2015-1-29 10:47
0
游客
登录 | 注册 方可回帖
返回
//