如果 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 部分的代码,所以导致崩溃了。
成功
![](https://img.haomeiwen.com/i226181/87cc367bfd7d862a.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
网友评论