apk安卓软件反汇编的一些经验和总结
1、有米去除 smail 代码
invoke-virtual {v2, v0, v1}, Landroid/widget/LinearLayout;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
2、 菜单删除 直接删除
invoke-interface {p1, v1, v3, v3, v0}, Landroid/view/Menu;->add(IIILjava/lang/CharSequence;)Landroid/view/MenuItem;
3、添加一些信息
<PreferenceCategory android:title="汉化信息及免责声明">
<Preference android:summary="本汉化软件仅为技术共享等制作,作品不用于任何商业目的,如果您喜爱此APP,请支持正版!" />
<PreferenceScreen android:layout="@layout/about_logo" android:key="about_logo">
<intent android:action="android.intent.action.VIEW" android:data="http://bbs.hiapk.com" />
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory android:title="汉化信息">
<PreferenceScreen android:title="安智汉化组 Tomi汉化" android:summary="主页:http://www.anzhi.com\n论坛:http://bbs.anzhi.com">
<intent android:action="android.intent.action.VIEW" android:data="http://bbs.anzhi.com" />
</PreferenceScreen>
</PreferenceCategory>
4、安 沃去广告重点 http://r2.adwo.com/adweb http://r2.adwo.com/adfs
解开apk,搜索所有文件里的http:字样(用UltraEdit搜),带ad字样的多半是广告链接,用空符替换,比如“http://ad.***”就改成“”就阻止了广告联网了,此时广告控件仍在,只是没内容。然后在manifest.xml里删除Adview控件那几行代码。空白控件就不会出现了。貌似有所谓的广告杀手软件能干这事,没试过。
还有些广告是自定义的,并未使用adview,这种有的直接“http://ad.***”就改成“”后就可能不再显示了,不过只是少数。另外那些软件手动去广告很麻烦的。
5、对话框
反编译apk,在.method public onCreate(Landroid/os/Bundle;)V (即窗口创建子程序 一般在AndoroidMainfest.xml中会有声明)下添加以下代码即可
const-string v0, "这里是弹出的提示"
const/4 v1, 0x1
invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
复制代码
说明:
a. const-string v0, "这里是弹出的提示",字串常量,对应Toast.makeText(EX05_01.this ,"Toast", Toast.LENGTH_LONG).show();的第二个参数。
b. const/4 v1, 0x1 16进制,对应Toast.LENGTH_LONG常量
c. invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText,调用. makeText()方法, 这个很重要了
d. move-result-object v0 调用结果返回值为v0
e. invoke-virtual {v0}, Landroid/widget/Toast;->show()V 调用show()方法
6、网址跳转
.line 15
new-instance v0, Landroid/content/Intent; // 这里是定义Intent 对象
const-string v1, "android.intent.action.VIEW" // 这个是设置Intent的Action_View
.line 16
const-string v2, "http://bbs.urenkz.com" // 这里为网页地址,http:// 大家都懂
invoke-static {v2}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri; // 这里是用URI把链接转义
move-result-object v2
.line 15
invoke-direct {v0, v1, v2}, Landroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V // 这里为实例化一个跳转的intent对象,v0,v1,v2 ,v0是对象,v1,v2是参数
.line 17
.local v0, intent:Landroid/content/Intent;
const-string v1, "com.android.browser" // 这是系统浏览器的包名
.line 18
const-string v2, "com.android.browser.BrowserActivity" // 系统浏览器的主类,也就是启动类
.line 17
invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; //把设置好的v1,v2,用对象v0设置好ClassName
.line 19
invoke-virtual {p0, v0}, Lcom/tencent/pao/BreezeGame;->startActivity(Landroid/content/Intent;)V // 这里是关键,启动跳转, Lcom/tencent/pao/BreezeGame 这个要替换成你项目的smali 的反编译格式的包路径</span>