如何确定使用哪种平台或编程语言来构建特定的Windows桌面应用程序?
有没有可以查看数据库并生成基本映射文件的工具?
如果可以使用数据库,并使用注释创建实际模型(java类),但不确定是否存在,那将会很棒?
最近我一直在努力学习逆向工程.因此,我一直在研究很多汇编代码.我对以下内容感到困惑:
movq %rax,0xf8(%rbp)
movq 0xf8(%rbp),%rax
Run Code Online (Sandbox Code Playgroud)
我已经好几次见过这个了.这不是多余的吗?为什么编译器会这样做?我正在看的二进制文件是用gcc编译的.
假设我在python解释器中并定义一个函数如下:
def h(a):
return a
Run Code Online (Sandbox Code Playgroud)
如果我想查看字节码(不是使用dis的反汇编),我通常可以使用h.func_code.co_code.有没有其他方法来查看字节码?
例如,在解释器中,如果我只是在h不进行函数调用的情况下键入,我会得到函数的地址.我可以使用该地址来获取字节码吗?还有其他方法吗?
评论中的一些其他信息:
该应用程序是用python编写的,并使用Py2App,cx_freeze或py2exe之类的东西打包.我在可执行文件上玩了一些技巧,现在,在启动时,可执行文件将我转储到python命令行.从那里,我手动将我的功能h输入到interepeter中.
的其他属性h.func_code都存在,如co_varnames,co_argcount等,但co_code并非如此.
如果我输入h.func_code.co_code翻译,我得到'code' object has no attribute 'co_code'.
更新:再次发表评论.据我所知,操作码已重新映射为随应用程序一起提供的python解释器.
假设以下x86-32指令:
add ebx,1
Run Code Online (Sandbox Code Playgroud)
有(至少)两种方法来组装这个操作码:
81 c3 01 00 00 00
Run Code Online (Sandbox Code Playgroud)
要么
83 c3 01
Run Code Online (Sandbox Code Playgroud)
第一个保持1作为4字节dword,第二个保持1作为字节
是否有一个指令将1保持为2个字节?如果没有原因?
任何类文件都可以相对容易地反编译为原始的Java源代码.
这是否意味着任何Java程序的源代码,除非以某种方式加密,对于拥有最终程序的任何人来说都相对容易获得?
如果是这样,对于那些不希望任何人可以获得商业秘密或工作的大公司来说,这不是一个问题吗?
我需要计算消息的CRC并将其放在此消息的开头,以便带有"prepended"补丁字节的消息的最终CRC等于0.我能够在几篇文章的帮助下很容易地做到这一点,但不是我的具体参数.问题是我必须使用给定的CRC32算法来计算内存块的CRC,但是我没有那个"反向"算法来计算那4个补丁字节/'种类的CRC'.给定CRC32算法的参数是:
计算CRC的代码(半字节,表驱动,我希望数据类型定义不言自明):
uint32 crc32tab(uint16* data, uint32 len, uint32 crc)
{
uint8 nibble;
int i;
while(len--)
{
for(i = 3; i >= 0; i--)
{
nibble = (*data >> i*4) & 0x0F;
crc = ((crc << 4) | nibble) ^ tab[crc >> 28];
}
data++;
}
return crc;
}
Run Code Online (Sandbox Code Playgroud)
需要的表是(我认为short [16]表应该包含大[256]表中的每个第16个元素,但是这个表实际上包含了前 16个元素,但这就是它提供给我的方式):
static const uint32 tab[16]=
{
0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9,
0x130476DC, 0x17C56B6B, 0x1A864DB2, 0x1E475005,
0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, …Run Code Online (Sandbox Code Playgroud) 我最近开始学习装配以进行逆向工程.我正在阅读实用逆向工程,并在那里看到这个汇编代码:
loop_start:
mov eax, [edi+4]
mov eax, [eax+ebx*4]
test eax, eax
... //They also did the dots here
jz short loc_7F627F
loc_7F627F:
inc ebx
cmp ebx, [edi]
jl short loop_start
Run Code Online (Sandbox Code Playgroud)
然后他们告诉我们这个信息应该给我们一个想法,把它反编译成这个(我正在做他们所做的所有点):
typedef struct _Foo
{
DWORD size;
DWORD array[...];} FOO, *PFOO;
PFOO bar= ...;
for(i= ...; i < bar->size; i++)
{
if(bar->array[i] != 0){
...
}
}
Run Code Online (Sandbox Code Playgroud)
但随着jz short loc_7F627F只会跳,如果EAX的含量为零不应该的...是之后jz,而不是之前jz?否则这将意味着我测试内容eax,是否为零,然后做一些未知的东西,然后跳转,如果它是零(假设没有其他指令包含在...影响ZF标志),这似乎不匹配C - 他们写的代码.
我需要帮助从反汇编逆向工程虚拟方法.该代码最初使用Microsoft的Visual C++编译.有问题的方法如下:
sub_92D110 proc near
xor al, al
retn
sub_92d110 endp
Run Code Online (Sandbox Code Playgroud)
这个方法在很多类之间引用,甚至在一个类的vtable内多次引用.我不确定它的作用; 这是否意味着该方法被内联,但调用仍然保持vtable保持其大小?
如果是这样,那该怎么xor al, al办?我是否误解了召唤大会或其他什么?