一个文件里面放置了图象,菜单等信息。进行读取,有兴趣的近来看看,有什么好的建议的望指点。

AbeiXu 2004-04-16 01:52:51
读取

String[] strings = AMBugs.getResource("\1\4\5\13\16\23\24\25\26\27\30\31\32\33\34\35\36\37");

片段代码如下:

protected static String[] getResource(String resourceNumbersString) throws
Exception {

byte flag = (byte) ( (theFlags >> 60) & 7);
if ( (flag >> 2 & 1) == 0) {
DataInputStream dis = null;
try {
int lastPos;

InputStream is = THEMidlet.getClass()
.getResourceAsStream("d.txt");

dis = new DataInputStream(is);

if (flag == 0) {

dis.skip(dis.readUnsignedShort() + 2);

flag = (byte) (dis.read() & 3);
if (flag == 3) {
theUIEncoding = dis.readUTF();
}
theFlags = theFlags | (long) flag << 60;
dis.close();
dis = null;
is = null;

String[] strings = getResource(resourceNumbersString);
return strings;
}

StringBuffer resourceNumbers = AMBugs.theStringBuffer;

resourceNumbers.delete(0, resourceNumbers.length())
.append(resourceNumbersString);

int stringsAmount = resourceNumbers.length();

int curResNumber = resourceNumbers.charAt(0);

int curAbsPos = (curResNumber + 1) * 2;

dis.skip(curAbsPos);

int curStringPos = dis.readUnsignedShort() + 4 + curAbsPos;
int nextStringPos;

curResNumber++;

lastPos = (resourceNumbers.charAt(stringsAmount - 1) + 1)
* 2 + 4;

int maxStringLength = 0;
int curStringLength;

int skip;
int i = 0;

stringsAmount = stringsAmount * 2 - 1;

while (true) {

resourceNumbers.insert(i++, (char) (curStringPos
- lastPos));

nextStringPos = dis.readUnsignedShort() + 4 +
(curResNumber + 1) * 2;

curResNumber++;

lastPos = nextStringPos;

curStringLength = nextStringPos - curStringPos;
maxStringLength = Math.max(maxStringLength, curStringLength);

resourceNumbers.setCharAt(i++, (char) curStringLength);

if (i < stringsAmount) {
skip = curResNumber;
curResNumber = resourceNumbers.charAt(i);
skip = (curResNumber - skip) * 2;

if (skip < 0) {
curStringPos = nextStringPos;
}
else {
if (skip > 0) {
dis.skip(skip);
}

curStringPos = dis.readUnsignedShort() + 4 +
(curResNumber + 1) * 2;

}
curResNumber++;
}
else {
break;
}
}

stringsAmount = resourceNumbers.length();

byte[] buf = new byte[maxStringLength];
String[] strings = new String[stringsAmount / 2];

for (i = 0; i < stringsAmount; i++) {
dis.skip(resourceNumbers.charAt(i++));

lastPos = resourceNumbers.charAt(i);
if (lastPos != 0) {
if (flag == 1) {
strings[i / 2] = dis.readUTF();
}
else {
dis.read(buf, 0, lastPos);

if (theUIEncoding == null) {
strings[i / 2] = new String(buf, 0, lastPos);
}
else {
strings[i / 2] = new String(buf, 0, lastPos,
theUIEncoding);
}
}
}
else {
strings[i / 2] = "";
}
}

return strings;

}
catch (Exception ignored) {
throw new Exception("Resource Bundle Exception");
}
finally {
try {
if (dis != null) {
dis.close();
}
}
catch (Throwable ignored) {}
}
}
else {
return null;
}
}


请教加交流,有兴趣的聊聊。
supcc@hotmail.com
...全文
82 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
changzz 2004-04-21
  • 打赏
  • 举报
回复
up
AbeiXu 2004-04-21
  • 打赏
  • 举报
回复

这东西也没什么意思,只是游戏不是我们这边写的.
也够郁闷的,那家伙变态,把所有的东西全写进txt文件.
要移植这个游戏.我估计只有重写了.

好无聊~~~


大家也没什么兴趣!结帖了!

谢谢!


feida424 2004-04-16
  • 打赏
  • 举报
回复
学习中!顶!
怎样通过图片的路径来生成一个Image对象?图片的位置应该如何设置,语句应该怎样写?
请指点!
filippo1980 2004-04-16
  • 打赏
  • 举报
回复
先看看!
内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。

13,096

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧