普通 Java 程序中怎么引入 android 包?

2017-09-17 14:04:11 +08:00
 Marsss
我知道这个问题对于 android 开发者来说有点幼稚,楼主只是个野生 python 爱好者,平时基本只用 python 实现需求,对于 java 还真的是陌生,咳咳。。。见谅,我尝试过搜索相关资料,但是由于需求有点特殊,找不到线索。希望能得到 V 友的一些指点。

我的需求是这样的,我需要反编译一个 apk,然后把其中的一段用来加密的函数抠出来,做成一个 jar 独立程序,python 就可以直接去调用这个 jar,获取结果。

但是我在抠出来的过程中,发现其中用到的一个 App 类,导入了很多 android 开头的包,这些包怎么导进去的呢,反编译的源码里也只看到了:android.net android.support ,没看到其他的包,是和开发环境有关系吗?
App.class:


另外这其中的:
public static App a()
{
return b;
}
这个函数怎么是这样写的呢,有什么作用?
13096 次点击
所在节点    Android
13 条回复
Le4fun
2017-09-17 14:08:06 +08:00
没太明白 Java 是要 jar 下载放项目里才可以
TakWolf
2017-09-17 14:14:02 +08:00
android.* 包需要在 Android 环境下才能运行,JavaSE 环境不行。
楼主反编译成功了,需要用 Java 标准库替换 android 的一些组件,保证代码可以运行在 javaSe 环境。
然后才能用 JPype 去调用。
Marsss
2017-09-17 14:30:32 +08:00
@TakWolf 意思是,这种 android.*需要另外用 java 标注库来重新写么,那么能不能大概指点一下图片里的那两个函数是起怎么作用,该怎么用 java 标准库来实现呢?
zengmingyang96
2017-09-17 19:27:29 +08:00
elapsedRealtime 函数返回的是手机自启动以来的毫秒数。
这个时间可能和加密有关
你导入 jar 包没用的,这个方法 JNI 调用的,除非你能搞到动态库

```
/**
* Returns milliseconds since boot, including time spent in sleep.
*
* @return elapsed milliseconds since boot.
*/
native public static long elapsedRealtime();
```
zengmingyang96
2017-09-17 19:29:00 +08:00
DouO
2017-09-17 19:39:28 +08:00
`implementation 'com.google.android:android:4.1.1.4'`
DouO
2017-09-17 19:40:35 +08:00
tairan2006
2017-09-17 19:41:03 +08:00
把安卓系统库替换掉=,=
jedihy
2017-09-18 07:09:37 +08:00
```
public static App a() {
return b;
}
```
单例?
Marsss
2017-09-18 09:46:06 +08:00
谢谢大家的讨论,看大家的回复,我的理解是,想直接复现源码并不是靠谱,网上看了一些资料后,我考虑去琢磨一下 xposed,去 hook 相关函数打印变量,可能会稍微坑少一点。
yzmm
2017-09-18 10:39:09 +08:00
楼主你看到的代码是被混淆之后的,所以会出现这种无聊的方法,其实就是不下让你看到真实逻辑。你在 AS 里面配置 gradle 把你反编译的 jar 加进来就可以调用了。
vjnjc
2017-09-18 11:12:44 +08:00
我感觉一个可行的方式是:
用这部分代码嵌在你的 android 的程序里面,然后 server 用推送的方式向 android app 询问加密 string。

假如按照你现在的思路,你需要看懂他的 app,然后把相关 android 的 api 换成 javase 的 api,并且因为你是 server 程序,并没有手机启动时间。。。
bashbot
2017-09-19 17:09:59 +08:00
Android 的 SDK 中有相关的 jar,你下载 android-sdk 把 jar 加载到项目中就能找到这些包了。

APK 反编译的话,apktool 和 jd-gui 都挺好的。
你需要把加密的代码抠出来,然后把 android 相关的调用替换掉,标准 JRE 中不能运行 android 包

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/391378

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX