2018-09-16 黑盒调用 libcocos2dlua 动态库 (成功) 破解贪婪洞穴资源

如果 so 没有被加壳,应该就可以:

#include "cocos2d.h"

using namespace cocos2d;

int main(int argc, char** argv) {
    log("%s\n", cocos2d::cocos2dVersion());

    ZipUtils::setPvrEncryptionKey(1,2,3,4);
    Image* img = new Image();
    img->initWithImageFile("xx.pvr");
    img->saveToFile("xx.png")
    delete img;
    return 0;
}

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := inject
LOCAL_SRC_FILES := inject.cpp

#shellcode.s

# LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
LOCAL_LDLIBS += -llog
LOCAL_LDLIBS += -L. -lcocos2dlua

#LOCAL_FORCE_STATIC_EXECUTABLE := true

include $(BUILD_EXECUTABLE)

Application.mk

APP_ABI := armeabi-v7a #x86
APP_STL := c++_static

把 so 、 inject 和 资源文件 push 到手机上。
MuMu 模拟器上跑不起来,明天拿个手机测试一下。

UP:

D/cocos2d-x debug info(24960): ###cocos2d-x-3.16>>>>
09-16 18:48:47.240 25111-25111/? A/libc: Fatal signal 7 (SIGBUS) at 0xfffffffb (code=1), thread 25111 (inject)

可以调用一下函数,但是有崩溃,还不知道什么回事。

UP2:
我知道了,少了 java 部分的代码,FIleUtils 涉及到 java 部分的代码,所以导致崩溃了。

成功

2018-09-16 黑盒调用 libcocos2dlua 动态库 (成功) 破解贪婪洞穴资源_第1张图片
image.png

主要代码如下:

    unsigned char *buf = nullptr;
    ssize_t bufferLen = 0;
    const char *file = "/data/local/tmp/ui_town_warehouse.pvr.ccz";
    getFileData(&buf, &bufferLen, file);

    unsigned char* unpackedData = nullptr;
    auto unpackedLen = ZipUtils::inflateCCZBuffer(buf, bufferLen, &unpackedData);

    writeFile(unpackedData, unpackedLen, "/data/local/tmp/1.pvr");

然后通过adb把文件拉回本地:

adb pull "/data/local/tmp/1.pvr"

UP3:
稍后奉上完整的工程以及脚本。

2018-09-16 23:27

  • END

你可能感兴趣的:(2018-09-16 黑盒调用 libcocos2dlua 动态库 (成功) 破解贪婪洞穴资源)