① swf文件反编译后要怎么回编译回swf文件
skip 9 words
Tom says John says good morning.
skip 3 words
back 7 wordsMary says thank you.
如果逐个字读的话,结果和原来一样,然而反编译器按句子来读取,自然发生错误。第一,它知道Tom说了什么,但语法不对,汇报出错;第二,它没有看到第二个“skip”命令,因为它处于句子中间;第三,当它被迫退回7个字后,感到迷惑,认为应该从“Tom said”开始执行整个句子;第四,这个错误使它在第二行和第三行之间陷入无限循环之中。总之,我们增加了“Tom said”这句垃圾代码,并提供整个句子长度的错误数据大小信息。这个错误的长度覆盖了“skip”命令。来看个真实的例子,请注意,这些技术需要操作字节码,纯actionscript不能够实现。例1 :向前跳转的包含无效尺寸数据的死代码。push True
branchifTrue label2
constants ''label2:push 'a',3setVariable
你仔细看的话,会发现"constants ''"这行是垃圾代码,它不可能被执行到。然而,理论上,当第二行的结果为"not True"时,它将被执行。因此,反编译器尝试对它进行反编译。让我们来增大"0x88 - constants"后面的"sentence size",从而包括知道脚本结尾的所有字节。你知道,反编译器将把字节码砍成像这样的3个句子:push True
branchifTrue label2
如果你试图反编译此SWF文件,根据我前面提到的4个错误,一些反编译器将碰壁。仍旧有些反编译器幸存,但只是显示:"if(false){};"。ASV 3也不能显示此脚本,但是ASV 4能够显示。为了破解这个SWF,我们移除死代码"constant xxxx", (0x88和随后两个字节),然后所有的东西都得到反编译。这儿是zip格式的文件,将详细解释怎样制作这样的受保护文件。例2:先后跳转的包含无效尺寸数据的死代码。
② 关于汇编语言的翻译,将下面的ASM码反编译为C语言,谢谢
r1=r0>>0x1f
r1=r0+(r1<<0x24)
r1=r1>>8
r1=r0-(r1<<8)
不对随便写写
③ 反编译大神求助不能生成apk怎么回事
反编译大神求助不能生成apk怎么回事
ERROR: ld.so: object '/system/lib/libsuc.so' from LD_PRELOAD cannot be preloaded: ignored.
W: Could not find sources
ERROR: ld.so: object '/system/lib/libsuc.so' from LD_PRELOAD cannot be preloaded: ignored.
libpng error: Not a PNG file
ERROR: Failure processing PNG image /sdcard/zzzzzzzxzzz/framework-res_src/res/drawable-hdpi/oppo_springlistviewbackground.png
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17222: error: Public entry identifier 0x10802ba entry index is larger than available symbols (index 698, total symbols 545).
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17222: error: Public symbol drawable/APKTOOL_DUMMY_02ba declared here is not defined.
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17223: error: Public entry identifier 0x108040a entry index is larger than available symbols (index 1034, total symbols 545).
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17223: error: Public symbol drawable/APKTOOL_DUMMY_040a declared here is not defined.
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17224: error: Public entry identifier 0x1080574 entry index is larger than available symbols (index 1396, total symbols 545).
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17224: error: Public symbol drawable/APKTOOL_DUMMY_0574 declared here is not defined.
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17225: error: Public entry identifier 0x1080602 entry index is larger than available symbols (index 1538, total symbols 545).
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17225: error: Public symbol drawable/APKTOOL_DUMMY_0602 declared here is not defined.
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17226: error: Public entry identifier 0x1080603 entry index is larger than available symbols (index 1539, total symbols 545).
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17226: error: Public symbol drawable/APKTOOL_DUMMY_0603 declared here is not defined.
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17227: error: Public entry identifier 0x1080604 entry index is larger than available symbols (index 1540, total symbols 545).
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17227: error: Public symbol drawable/APKTOOL_DUMMY_0604 declared here is not defined.
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17228: error: Public entry identifier 0x1080605 entry index is larger than available symbols (index 1541, total symbols 545).
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17228: error: Public symbol drawable/APKTOOL_DUMMY_0605 declared here is not defined.
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17229: error: Public entry identifier 0x1080606 entry index is larger than available symbols (index 1542, total symbols 545).
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17229: error: Public symbol drawable/APKTOOL_DUMMY_0606 declared here is not defined.
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17230: error: Public entry identifier 0x1080607 entry index is larger than available symbols (index 1543, total symbols 545).
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17230: error: Public symbol drawable/APKTOOL_DUMMY_0607 declared here is not defined.
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17231: error: Public entry identifier 0x1080608 entry index is larger than available symbols (index 1544, total symbols 545).
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17231: error: Public symbol drawable/APKTOOL_DUMMY_0608 declared here is not defined.
/sdcard/zzzzzzzxzzz/framework-res_src/res/values/public.xml:17232: error: Public entry identifier 0x1080609 entry index is larger than available symbols (index 1545, total symbols 545).
④ java中为什么0x00不会输出空,而是输出的小方块。不好意思,本人初学java,希望高手回答,谢谢!
Eclipse 提供的 Console 视图并不完全不等同于 System.out,这个 Console 视图本身能提供输入功能,类似在 DOS 命令行做的一样,但毕竟是个图形界面模拟的,有些瑕玼,比如如果你有东西要输入那么第一次输入之前你需要手工把输入光标移到最后,否则当我们输入中文时会第一个汉字会出现奇怪的错误。
一个控制字符因为是不可见的字符,所以在 Console 这个图形界面上会被认为是这个字符在当前使用的字体中找不到对应的符号而显示成方框,所有字体都不可能为一个不能够显示出来的字符提供图形式的字形,对吧?在 Windows 上显示成方框就是字体的问题,而在 Linux/MacOS 上字体中找不到字符时会显示成一个方框,里面包括4个小方形,每个方形都是这个字符的内部编码的16进制表示形式,它比 Windows 的好处是,至少你作为技术人员还能通过16进制编码知道它是什么字符,而 Windows 上一片空白你不知道它到底是什么字符。
⑤ lua 怎么反编译
1.Lua的虚拟机指令,5.2 的有40条
Lua的指令使用一个32bit的unsigned integer表示。所有指令的定义都在lopcodes.h文件中(可以从Lua 官方网站下
载),使用一个enum OpCode代表指令类型。在lua5.2中,总共有40种指令(id从0到39)。根据指令参数的不同,可以将所有指令分为4
类:
typedef enum {
/*----------------------------------------------------------------------
name args description
------------------------------------------------------------------------*/
OP_MOVE,/* A B R(A) := R(B) */
OP_LOADK,/* A Bx R(A) := Kst(Bx) */
OP_LOADKX,/* A R(A) := Kst(extra arg) */
OP_LOADBOOL,/* A B C R(A) := (Bool)B; if (C) pc++ */
OP_LOADNIL,/* A B R(A), R(A+1), ..., R(A+B) := nil */
OP_GETUPVAL,/* A B R(A) := UpValue[B] */
OP_GETTABUP,/* A B C R(A) := UpValue[B][RK(C)] */
OP_GETTABLE,/* A B C R(A) := R(B)[RK(C)] */
OP_SETTABUP,/* A B C UpValue[A][RK(B)] := RK(C) */
OP_SETUPVAL,/* A B UpValue[B] := R(A) */
OP_SETTABLE,/* A B C R(A)[RK(B)] := RK(C) */
OP_NEWTABLE,/* A B C R(A) := {} (size = B,C) */
OP_SELF,/* A B C R(A+1) := R(B); R(A) := R(B)[RK(C)] */
OP_ADD,/* A B C R(A) := RK(B) + RK(C) */
OP_SUB,/* A B C R(A) := RK(B) - RK(C) */
OP_MUL,/* A B C R(A) := RK(B) * RK(C) */
OP_DIV,/* A B C R(A) := RK(B) / RK(C) */
OP_MOD,/* A B C R(A) := RK(B) % RK(C) */
OP_POW,/* A B C R(A) := RK(B) ^ RK(C) */
OP_UNM,/* A B R(A) := -R(B) */
OP_NOT,/* A B R(A) := not R(B) */
OP_LEN,/* A B R(A) := length of R(B) */
OP_CONCAT,/* A B C R(A) := R(B).. ... ..R(C) */
OP_JMP,/* A sBx pc+=sBx; if (A) close all upvalues >= R(A) + 1 */
OP_EQ,/* A B C if ((RK(B) == RK(C)) ~= A) then pc++ */
OP_LT,/* A B C if ((RK(B) < RK(C)) ~= A) then pc++ */
OP_LE,/* A B C if ((RK(B) <= RK(C)) ~= A) then pc++ */
OP_TEST,/* A C if not (R(A) <=> C) then pc++ */
OP_TESTSET,/* A B C if (R(B) <=> C) then R(A) := R(B) else pc++ */
OP_CALL,/* A B C R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) */
OP_TAILCALL,/* A B C return R(A)(R(A+1), ... ,R(A+B-1)) */
OP_RETURN,/* A B return R(A), ... ,R(A+B-2) (see note) */
OP_FORLOOP,/* A sBx R(A)+=R(A+2);
if R(A) <?= R(A+1) then { pc+=sBx; R(A+3)=R(A) }*/
OP_FORPREP,/* A sBx R(A)-=R(A+2); pc+=sBx */
OP_TFORCALL,/* A C R(A+3), ... ,R(A+2+C) := R(A)(R(A+1), R(A+2)); */
OP_TFORLOOP,/* A sBx if R(A+1) ~= nil then { R(A)=R(A+1); pc += sBx }*/
OP_SETLIST,/* A B C R(A)[(C-1)*FPF+i] := R(A+i), 1 <= i <= B */
OP_CLOSURE,/* A Bx R(A) := closure(KPROTO[Bx]) */
OP_VARARG,/* A B R(A), R(A+1), ..., R(A+B-2) = vararg */
OP_EXTRAARG/* Ax extra (larger) argument for previous opcode */
} OpCode;
**********************************************************
虚拟机指令(2) MOVE & LOAD
OP_MOVE A B
OP_MOVE用来将寄存器B中的值拷贝到寄存器A中,由于Lua是基于寄存器虚拟机,大部分的指令都是直接对寄存器进行操作,而不需要对数据进行压栈和弹栈。OP_MOVE 指令的作用 是将一个Local变量复制给另一个local变量.
例子:
local a = 10;
local b = a;
编译出来的结果
1 [1] LOAD 0 1;1代表的是常量表的项,这里代表的是10
2 [2] MOVE 1 0
所代表的二进制为
B A OP_Code
Load 0 1 = 100000000 000000000 00000000 000001 = 0x80000001 ,
也就是说, 0x80000001 的二进制所代表的指令为 Load 0 1,这里B中的最高位为1,表示的B为常量表的序号,而不是寄存器
MOVE 1 0 = 000000000 000000000 00000001 000000 = 0x40
*****************华丽分割线***********************************************
1.lua 的二进制格式,官方的luac.exe 编译出来的格式
原始的lua 脚本为
local a = 10
local b = a
print(b)
下面介绍格式文件,介绍每个字段的意思.当然啦,这种格式是官方的,各个游戏公司可能会做一些改动,但是万变不离其宗。个个字段已经用颜色标明了
在lua 的源文件中,前面四个字节 1b 4c 75 61 也就是 \033Lua , 标识的是lua文件的特有的标示符数据格式,代表是lua
#define LUA_SIGNATURE "\033Lua" 033时八进制 = 0x1b ,很多那些反编译工具判断这四个字节的值,来判断是否能反编译,很多公司都会偷偷的去掉或者用其他的值来替换,以迷惑菜鸟。呵呵
52 第五个字节,表示的是,当前lua 的目标版本,这里指的是5.2 版本。
感觉编辑的好痛苦,我还是直接贴我的比较图算了,看起来比较舒服
函数的头描述
linedefined = 00 00 00 00 ;函数定义开始处的行号
linedefined = 00 00 00 00 ; 函数定义结束处的行号 ;顶级函数开始和结束行号都是为00
numparams = 00 ;固定参数的数目 number of fixed parameters
is_vararg = 01 ;可变参数标识符
• 1=VARARG_HASARG
• 2=VARARG_ISVARARG
• 4=VARARG_NEEDSARG
maxstacksize = 03 ;调用函数所需要的堆栈空间指令段
sizecode = 06 00 00 00 ; 函数中 指令的数目,缓存区的大小 = sizecode * sizeof(Instruction),每四个字节为一条指令
code = 02 00 00 00 41 00 00 00 87 40 40 00 c1 00 80 00 a0 40 00 01 1e 00 80 00
常量列表 保存着函数中引用的常量的列表 (常量池)
Constant.sizek = 02 00 00 00 ;常量列表的大小 ,缓存区的大小 = Constant.sizek * sizeof(TValue) = 2 * 8 = 16,每项为8个字节,
TValue * = 03 00 00 .
00 00 00 00 24 40 04 06 00 00 00 70 72 69 6e 74 [email protected]
Constant list 数据结构 保存着函数中引用的常量的列表 (常量池)
Integer 常量列表的大小 (sizek)
[
1 byte 常量类型 (value in parentheses): • 0=LUA_TNIL, 1=LUA_TBOOLEAN,• 3=LUA_TNUMBER, 4=LUA_TSTRING
Const 常量本身: 如果常量类型是0这个域不存在;如果类型是1,这个是0或1;如果类型是3这个域是 Number;如果类型是4 这个域是String。
]
这里的String 是包含"0"为结束的字符串
为什么上传图片以后,图片都变小了,而且不清晰呢?
***********************给大家发一点福利,矫正虚拟机指令的函数**************************************
//矫正虚拟机指令
DWORD Rectify(DWORD Source);
{
DWORD Instruction = Source;
BYTE Source_OpCode = Instruction & 0x3F;
switch(Source_OpCode)
{
case OP_MOVE:
Source_OpCode = Target_OpCode;
break;
...
}
Instruction = ((Instruction & 0xFFFFFFC0) | Source_OpCode);
return Instruction
}
⑥ hex编码求反编译:0x7573657273
答案是:users
⑦ 谁能帮我把一个hex文件反编译为c语言文件
文件有两种,一种是文本文件,一种是程序二进制文件,不管哪种文件都可以用十六进制编码来显示,称为hex文件。
1、文本Hex文件一般不需要转成C语言,更多的是程序二进制文件,用十六进制显示,可以转换成C语言,一般使用相应的反汇编程序来实现,这方面的工具很多,不同的平台略有不同。Windows平台一般常用的OllyDbg、Windbg、IDA,Linux平台使用最多的是GDB和Linux版的IDA。
OllyDbg,简称OD,一般是软件逆向工程爱好者,最先使用的一个工具,但是因为当下不在更新,所以一般用一般用于学习使用,下图中左上角的区域即为反汇编区域 ,用户可以根据汇编指令,分析程序算法,然后自己编写代码。
通过这个实例 ,相信应该能理解一个大致的流程啦。
⑧ 反编译apk出现错误提示
反编出错,是很正常的。
有很多的开发者,都使用一些防反编的做法,令到一般无法反编,如qq的、网络输入法等
⑨ .net中反编译过后代码怎么组合(c#)
[CompilerGenerated] 这个标志已经告诉你这个是编译器生成的了,常规情况下你可以去掉这段代码并重试。
反编译过来的代码通常是无法直接编译的,需要你自己改写