如何反编译我的appconfig.json

时间:2017-12-11 20:03:58

标签: xamarin apk app-config reverse-engineering api-key

我正在使用Xamarin,我将所有API密钥存储在我的PCL中,名为appconfig.json

生成APK时,我的API密钥存储在哪里?

有人可以使用此APK并反编译以获取此文件的内容吗?

我知道这是可能的,但我在Mac上,因此无法访问Windows工具。

一旦编译完成,有人可以通过这些步骤来阅读appconfig.json的内容吗?这只是为了让我能证明它可以做到 - 我知道它可以,它只是花了我太久。谢谢!

2 个答案:

答案 0 :(得分:2)

因此,假设我在我的应用程序的一个程序集中调用了这个json文件EmbeddedResource(调用SomeLibrary):

{
    "Password": "SushiHangover",
    "Logging": {
        "Debug": {
            "LogLevel": {
                "Default": "Warning"
            }
        },
        "Console": {
            "LogLevel": {
                "Default": "Warning"
            }
        }
    }
}

我存档&发布.apk

提取apk内容

unzip com.sushihangover.SomeApp.apk -d foobar

搜索所有嵌入资源:

使用ikdasm搜索嵌入资源:

find . -name "*.dll" -print0 | xargs -n 1 -0 -J % ikdasm % | grep .mresource

.mresource public charinfo.nlp
.mresource public collation.core.bin
.mresource public collation.tailoring.bin
.mresource public mscorlib.xml
.mresource public SomeLibrary.appconfig.json

找到了appconfig.json资源,因此我们可以再次使用ikdasm来获取详细信息。

SomeLibrary.appconfig.json详细信息:

ikdasm assemblies/SomeLibrary.dll

结果:

~~~~
69 62 72 61 72 79 00 00 ) // ...SomeLibrary..
  .hash algorithm 0x00008004
  .ver 1:0:0:0
}
.mresource public SomeLibrary.appconfig.json
{
  // Offset: 0x00000000 Length: 0x00000116
  // WARNING: managed resource file SomeLibrary.appconfig.json created
}
.module SomeLibrary.dll
// MVID: {3100E9F8-3BB0-4E49-ADC7-33B284FCCFAE}
.imagebase 0x00400000
~~~~

string程序集以获取详细信息:

cd foobar
find . -name "*.dll" -print0 | xargs -n 1 -0 -J % strings %

~~~
mscoree.dll
!This program cannot be run in DOS mode.
.text
`.rsrc
@.reloc
    "Password": "SushiHangover",
    "Logging": {
        "Debug": {
            "LogLevel": {
                "Default": "Warning"
            }
        },
        "Console": {
            "LogLevel": {
                "Default": "Warning"
            }
        }
    }
BSJB
v4.0.30319
~~~~

答案 1 :(得分:0)

对于Android应用,您可以在APK中包含Assets

中的任意文件
string config;

AssetManager assets = this.Assets;
using (StreamReader sr = new StreamReader (assets.Open ("appconfig.json")))
{
    config = sr.ReadToEnd ();
}