中国第八军团
新手报道 :
新兵宿舍
求助问答 :
悬赏问答
技术探讨 :
网络安全
敲敲代码 :
编程开发
资源分享 :
资源下载
论坛生活 :
军团茶座
站务管理 :
论坛版务
主题:1690 回帖:16933 会员:1264 在线:1
发新帖

记一次看雪论坛Android端反编译去广告

Sky_M 2016-8-14 3041
楼主新手,第一次做安卓得反编译,用时3个小时,虽然是非常简单得功能。分享给大家!而且改了之后有一点不足!1、去掉自动弹窗广告
2、去掉按返回键得弹窗广告

305

这个是豌豆荚上搜索出来得,但是打开后会常常出现这种弹窗广告
306

正好最近想学习安卓逆向来着,就拿着简单得功能练练手
工具:APKIDE(也叫做APK改之理)这个工具用来反编译apk以及重新打包生成apk,就是这个
309
现在把apk文件直接拖到APKIDE中,就会自动反编译,反编译成功后
310
做过安卓逆向的人都知道一般都会找突破口,一般来说是文字,然而这个广告是没有文字的,所以只有先看看AndroidManifest.xml,这个文件是整个应用的配置文件,就是这货
311
在这里面看到"IFLYTEK_APPKEY_AD"关键字AD就是广告得简写,所以这一大段代码都很可疑
<service android:name="com.zdp.aseo.content.AseoZdpUpdateService"/>
<activity android:name="com.iflytek.voiceads.request.IFLYBrowser" android:screenOrientation="portrait"/>
<meta-data android:name="IFLYTEK_APPKEY_AD" android:value="54fe544f"/>
<activity android:configChanges="keyboardHidden|orientation" android:excludeFromRecents="true" android:launchMode="singleInstance" android:name="com.weur.SabActivity" android:theme="@android:style/Theme.Dialog"/>
<service android:name="com.weur.mkd.DBS"/>
<receiver android:name="com.weur.mkd.DBR">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<action android:name="android.intent.action.USER_PRESENT"/>
</intent-filter>
</receiver>
<meta-data android:name="UMENG_APPKEY" android:value="5560611267e58ef7fa00538c"/>
<meta-data android:name="UMENG_CHANNEL" android:value="Umeng"/>

在右边搜索栏,依次搜索AseoZdpUpdateService、IFLYBrowser、SabActivity都没有发现真正的类,在谷歌上搜索IFLYTEK_APPKEY_AD,结果这是讯飞的广告sdk,看了帮助文档,感觉还是没有办法。不过这个时候想起来,理论上不在配置文件中配置就不能使用,于是把上面可疑代码全部删除,现在AndroidManifest.xml文件成了这样:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.superapp.bbs.kanxue" platformBuildVersionCode="19" platformBuildVersionName="4.4.2-938007">
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
…………
<application android:allowBackup="true" android:debuggable="true" android:icon="@drawable/kanxue" android:label="@string/app_name" android:name="com.superapp.bbs.kanxue.App" android:theme="@style/NormalPageTheme">
<activity android:name="SplashActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
…………
<activity android:name="AboutPage" android:screenOrientation="portrait"/>
</application>
</manifest>


重新生成一下APK:
312

> 正在反编译Apk... - 成功!
> 正在将dex转成jar... - 成功!

生成成功,安装后确实没有弹窗广告了!但是在按返回键的时候又出现这个:
306

这个就必须改代码了,首先这个是个按键事件,于是搜索KeyEvent
314

找到MainActivity,打开文件,根据关键字找到这个段代码,安卓虽然通过java来写的,但是反编译出来后是smail文件,所以要看懂这个,需要一定的smail语法基础,当然也可以用其他工具将代码翻译成java,但是修改代码还是只能修改smail文件才行!
# virtual methods
.method public dispatchKeyEvent(Landroid/view/KeyEvent;)Z
.locals 2
.param p1, "event" # Landroid/view/KeyEvent;

.prologue
.line 78
invoke-virtual {p1}, Landroid/view/KeyEvent;->getKeyCode()I

move-result v0

.line 79
.local v0, "keyCode":I
const/4 v1, 0x4

if-ne v0, v1, :cond_0

.line 80
invoke-virtual {p1}, Landroid/view/KeyEvent;->getAction()I

move-result v1

if-nez v1, :cond_0

.line 89
new-instance v1, Lcom/superapp/bbs/kanxue/MainActivity$1;

invoke-direct {v1, p0}, Lcom/superapp/bbs/kanxue/MainActivity$1;-><init>(Lcom/superapp/bbs/kanxue/MainActivity;)V

.line 88
invoke-static {p0, v1}, Lcom/sdm/ehf/Kdn;->type2(Landroid/content/Context;Landroid/content/DialogInterface$OnClickListener;)V

.line 110
const/4 v1, 0x1

.line 112
:goto_0
return v1

:cond_0
invoke-super {p0, p1}, Landroid/app/TabActivity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z

move-result v1

goto :goto_0
.end method

这段代码,我也看不懂,所以,神器JEB,就是将smail文件翻译成JAVA文件,直接上代码吧(不知道为啥这个图上传不了):
public boolean dispatchKeyEvent(KeyEvent arg3) {
boolean v1;
if(arg3.getKeyCode() != 4 || arg3.getAction() != 0) {
v1 = super.dispatchKeyEvent(arg3);
}
else {
Kdn.type2(((Context)this), new DialogInterface$OnClickListener() {
public void onClick(DialogInterface arg2, int arg3) {
System.exit(0);
switch(arg3) {
case -1: {
MainActivity.this.finish();
break;
}
}
}
});
v1 = true;
}

return v1;
}

从上面可以判断出,当按下的不是返回键的话,就执行父类的按键方法,否则就会执行下面你的type2方法,这个type2方法就是弹出广告的方法了
于是,我们把smail文件改成无论什么都执行父类方法就行:
# virtual methods
.method public dispatchKeyEvent(Landroid/view/KeyEvent;)Z
.locals 2
.param p1, "event" # Landroid/view/KeyEvent;

.prologue
.line 78
invoke-super {p0, p1}, Landroid/app/TabActivity;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z

move-result v1

return v1

move-result v0
.end method

上面代码意思就是调用父类的dispatchKeyEvent方法,然后将返回值赋值到寄存器v1中,最后将v1的值返回出去。
保存后,重新生成apk,然后安装上,经过测试完全没有问题!!




最后再写这个文章的时候,在豌豆荚上发现了另一个没有广告的客户端,楼主猝!
最新回复 (16)
Sky_M 2016-8-14
1
我都要哭了,不能超过10000字,幸苦编辑那么长时间,结果图片全给我挂了1、豌豆荚的看雪论坛客户端
1、豌豆荚中的看雪客户端305
2、就是这种广告
306
3、apkide
309

4、加载apk后的
310
5、配置文件
311

6、重新生成apk
314
一萬 2016-8-14
2
不错不错,虽然1楼没图。。
Sky_M 2016-8-14
3
回复 3# 一萬


这个真心不能怪我啊……论坛这个编辑器搞得我措不及防
一萬 2016-8-14
4
回复 4# Sky_M


哈哈,慢慢就习惯了~
程小诺 2016-8-23
5
我表示,楼主是谁啊回复 3# 一萬
一萬 2016-8-23
6
回复 6# 程小诺


不造,自己问!
程小诺 2016-8-23
7
。。。。。就是不知道是技术型人才是灌水型人才啊回复 7# 一萬
Sky_M 2016-8-23
8
回复 8# 程小诺


不是人才,楼主是一名资深的潜水众!
一萬 2016-9-1
9
回复 8# 程小诺


咱第八 都是技术型人才
程小诺 2016-9-1
10
是的,比如我回复 10# 一萬
一萬 2016-9-1
11
回复 11# 程小诺


灌水型的~
程小诺 2016-9-2
12
你勋章怎么好像多了一个回复 12# 一萬
一萬 2016-9-2
13
回复 13# 程小诺


没有啊 一直都是6个
程小诺 2016-9-2
14
一万姐姐,我也想要回复 14# 一萬
一萬 2016-9-2
15
回复 15# 程小诺


你管我要没用啊
低调 2016-9-4
16
水军飘过~~~~~~~~
返回



©1999-2017 第八军团
Time: 0.022, SQL: 11