├── ReadMe.md ├── bin └── Debug │ └── lua.exe ├── lua.cbp ├── lua.depend ├── lua.layout ├── luatool.exe ├── main.cpp ├── main.o ├── obj └── Debug │ └── main.o ├── xxtea.cpp └── xxtea.h /ReadMe.md: -------------------------------------------------------------------------------- 1 | # LuaTools 2 | 3 | 制作人:Blacat Recycler 4 | 5 | ## 应用介绍 6 | 7 | 本小程序是为了学习目的开发,针对Cocos2dx-Lua开发的安卓游戏反编译设计。用于拆包得到的Lua文件加解密,仅仅为了获取源码学习开发。禁止用于修改游戏数据进行作弊 8 | 9 | ## 使用方法 10 | 11 | 在控制台中运行,输入以下 12 | 13 | |命令格式|作用| 14 | |:--|:---| 15 | |D(d) [fileName] \[sign] \[key]|根据输入的Sign和Key解密文件,解密文件为原文件名\+\'.lua\'| 16 | |B(b) [fileName] \[sign] \[key]|根据输入的Sign和Key加密文件,加密文件为原文件名去除\'.lua\'| -------------------------------------------------------------------------------- /bin/Debug/lua.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackcatrecycler/LuaTools/d907a4d354698511e75df26c362a5f43fcfb0ebc/bin/Debug/lua.exe -------------------------------------------------------------------------------- /lua.cbp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 42 | 43 | -------------------------------------------------------------------------------- /lua.depend: -------------------------------------------------------------------------------- 1 | # depslib dependency file v1.0 2 | 1516369324 source:f:\apk\lua\main.cpp 3 | 4 | 5 | 6 | "xxtea.cpp" 7 | 8 | 1516285460 f:\apk\lua\xxtea.cpp 9 | "xxtea.h" 10 | 11 | 12 | 13 | 1516369488 f:\apk\lua\xxtea.h 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /lua.layout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /luatool.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackcatrecycler/LuaTools/d907a4d354698511e75df26c362a5f43fcfb0ebc/luatool.exe -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackcatrecycler/LuaTools/d907a4d354698511e75df26c362a5f43fcfb0ebc/main.cpp -------------------------------------------------------------------------------- /main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackcatrecycler/LuaTools/d907a4d354698511e75df26c362a5f43fcfb0ebc/main.o -------------------------------------------------------------------------------- /obj/Debug/main.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackcatrecycler/LuaTools/d907a4d354698511e75df26c362a5f43fcfb0ebc/obj/Debug/main.o -------------------------------------------------------------------------------- /xxtea.cpp: -------------------------------------------------------------------------------- 1 | /*********************************************************************** 2 | 3 | Copyright 2006-2009 Ma Bingyao 4 | Copyright 2013 Gao Chunhui, Liu Tao 5 | 6 | These sources is free software. Redistributions of source code must 7 | retain the above copyright notice. Redistributions in binary form 8 | must reproduce the above copyright notice. You can redistribute it 9 | freely. You can use it with any free or commercial software. 10 | 11 | These sources is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY. Without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14 | 15 | github: https://github.com/liut/pecl-xxtea 16 | 17 | *************************************************************************/ 18 | 19 | #include "xxtea.h" 20 | #include 21 | #include 22 | 23 | static void xxtea_long_encrypt(xxtea_long *v, xxtea_long len, xxtea_long *k) 24 | { 25 | xxtea_long n = len - 1; 26 | xxtea_long z = v[n], y = v[0], p, q = 6 + 52 / (n + 1), sum = 0, e; 27 | if (n < 1) { 28 | return; 29 | } 30 | while (0 < q--) { 31 | sum += XXTEA_DELTA; 32 | e = sum >> 2 & 3; 33 | for (p = 0; p < n; p++) { 34 | y = v[p + 1]; 35 | z = v[p] += XXTEA_MX; 36 | } 37 | y = v[0]; 38 | z = v[n] += XXTEA_MX; 39 | } 40 | } 41 | 42 | static void xxtea_long_decrypt(xxtea_long *v, xxtea_long len, xxtea_long *k) 43 | { 44 | xxtea_long n = len - 1; 45 | xxtea_long z = v[n], y = v[0], p, q = 6 + 52 / (n + 1), sum = q * XXTEA_DELTA, e; 46 | if (n < 1) { 47 | return; 48 | } 49 | while (sum != 0) { 50 | e = sum >> 2 & 3; 51 | for (p = n; p > 0; p--) { 52 | z = v[p - 1]; 53 | y = v[p] -= XXTEA_MX; 54 | } 55 | z = v[n]; 56 | y = v[0] -= XXTEA_MX; 57 | sum -= XXTEA_DELTA; 58 | } 59 | } 60 | 61 | static unsigned char *fix_key_length(unsigned char *key, xxtea_long key_len) 62 | { 63 | unsigned char *tmp = (unsigned char *)malloc(16); 64 | memcpy(tmp, key, key_len); 65 | memset(tmp + key_len, '\0', 16 - key_len); 66 | return tmp; 67 | } 68 | 69 | static xxtea_long *xxtea_to_long_array(unsigned char *data, xxtea_long len, int include_length, xxtea_long *ret_len) { 70 | xxtea_long i, n, *result; 71 | 72 | n = len >> 2; 73 | n = (((len & 3) == 0) ? n : n + 1); 74 | if (include_length) { 75 | result = (xxtea_long *)malloc((n + 1) << 2); 76 | result[n] = len; 77 | *ret_len = n + 1; 78 | } else { 79 | result = (xxtea_long *)malloc(n << 2); 80 | *ret_len = n; 81 | } 82 | memset(result, 0, n << 2); 83 | for (i = 0; i < len; i++) { 84 | result[i >> 2] |= (xxtea_long)data[i] << ((i & 3) << 3); 85 | } 86 | 87 | return result; 88 | } 89 | 90 | static unsigned char *xxtea_to_byte_array(xxtea_long *data, xxtea_long len, int include_length, xxtea_long *ret_len) { 91 | xxtea_long i, n, m; 92 | unsigned char *result; 93 | 94 | n = len << 2; 95 | if (include_length) { 96 | m = data[len - 1]; 97 | if ((m < n - 7) || (m > n - 4)) return NULL; 98 | n = m; 99 | } 100 | result = (unsigned char *)malloc(n + 1); 101 | for (i = 0; i < n; i++) { 102 | result[i] = (unsigned char)((data[i >> 2] >> ((i & 3) << 3)) & 0xff); 103 | } 104 | result[n] = '\0'; 105 | *ret_len = n; 106 | 107 | return result; 108 | } 109 | 110 | static unsigned char *do_xxtea_encrypt(unsigned char *data, xxtea_long len, unsigned char *key, xxtea_long *ret_len) { 111 | unsigned char *result; 112 | xxtea_long *v, *k, v_len, k_len; 113 | 114 | v = xxtea_to_long_array(data, len, 1, &v_len); 115 | k = xxtea_to_long_array(key, 16, 0, &k_len); 116 | xxtea_long_encrypt(v, v_len, k); 117 | result = xxtea_to_byte_array(v, v_len, 0, ret_len); 118 | free(v); 119 | free(k); 120 | 121 | return result; 122 | } 123 | 124 | static unsigned char *do_xxtea_decrypt(unsigned char *data, xxtea_long len, unsigned char *key, xxtea_long *ret_len) { 125 | unsigned char *result; 126 | xxtea_long *v, *k, v_len, k_len; 127 | 128 | v = xxtea_to_long_array(data, len, 0, &v_len); 129 | k = xxtea_to_long_array(key, 16, 0, &k_len); 130 | xxtea_long_decrypt(v, v_len, k); 131 | result = xxtea_to_byte_array(v, v_len, 1, ret_len); 132 | free(v); 133 | free(k); 134 | 135 | return result; 136 | } 137 | 138 | unsigned char *xxtea_encrypt(unsigned char *data, xxtea_long data_len, unsigned char *key, xxtea_long key_len, xxtea_long *ret_length) 139 | { 140 | unsigned char *result; 141 | 142 | *ret_length = 0; 143 | 144 | if (key_len < 16) { 145 | unsigned char *key2 = fix_key_length(key, key_len); 146 | result = do_xxtea_encrypt(data, data_len, key2, ret_length); 147 | free(key2); 148 | } 149 | else 150 | { 151 | result = do_xxtea_encrypt(data, data_len, key, ret_length); 152 | } 153 | 154 | return result; 155 | } 156 | 157 | unsigned char *xxtea_decrypt(unsigned char *data, xxtea_long data_len, unsigned char *key, xxtea_long key_len, xxtea_long *ret_length) 158 | { 159 | unsigned char *result; 160 | 161 | *ret_length = 0; 162 | 163 | if (key_len < 16) { 164 | unsigned char *key2 = fix_key_length(key, key_len); 165 | result = do_xxtea_decrypt(data, data_len, key2, ret_length); 166 | free(key2); 167 | } 168 | else 169 | { 170 | result = do_xxtea_decrypt(data, data_len, key, ret_length); 171 | } 172 | 173 | return result; 174 | } 175 | 176 | /* }}} */ -------------------------------------------------------------------------------- /xxtea.h: -------------------------------------------------------------------------------- 1 | /*********************************************************************** 2 | 3 | Copyright 2006-2009 Ma Bingyao 4 | Copyright 2013 Gao Chunhui, Liu Tao 5 | 6 | These sources is free software. Redistributions of source code must 7 | retain the above copyright notice. Redistributions in binary form 8 | must reproduce the above copyright notice. You can redistribute it 9 | freely. You can use it with any free or commercial software. 10 | 11 | These sources is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY. Without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14 | 15 | github: https://github.com/liut/pecl-xxtea 16 | 17 | *************************************************************************/ 18 | 19 | #ifndef XXTEA_H 20 | #define XXTEA_H 21 | 22 | #include /* for size_t & NULL declarations */ 23 | 24 | #if defined(_MSC_VER) 25 | 26 | typedef unsigned __int32 xxtea_long; 27 | 28 | #else 29 | 30 | #if defined(__FreeBSD__) && __FreeBSD__ < 5 31 | /* FreeBSD 4 doesn't have stdint.h file */ 32 | #include 33 | #else 34 | #include 35 | #endif 36 | 37 | typedef uint32_t xxtea_long; 38 | 39 | #endif /* end of if defined(_MSC_VER) */ 40 | 41 | #define XXTEA_MX (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z) 42 | #define XXTEA_DELTA 0x9e3779b9 43 | 44 | unsigned char *xxtea_encrypt(unsigned char *data, xxtea_long data_len, unsigned char *key, xxtea_long key_len, xxtea_long *ret_length); 45 | unsigned char *xxtea_decrypt(unsigned char *data, xxtea_long data_len, unsigned char *key, xxtea_long key_len, xxtea_long *ret_length); 46 | 47 | #endif 48 | --------------------------------------------------------------------------------