小编edi*_*ion的帖子

如何避免APK文件的逆向工程?

我正在为Android 开发支付处理应用程序,我想阻止黑客从APK文件访问任何资源,资产或源代码.

如果有人将.apk扩展名更改为.zip,那么他们可以解压缩它并轻松访问所有应用程序的资源和资产,并使用dex2jar和Java反编译器,他们也可以访问源代码.逆向工程Android APK文件非常容易 - 有关详细信息,请参阅Stack Overflow问题从APK文件到项目的逆向工程.

我使用了随Android SDK提供的Proguard工具.当我对使用签名密钥库和Proguard生成的APK文件进行逆向工程时,我得到了混淆代码.

但是,Android组件的名称保持不变,某些代码(如应用程序中使用的键值)保持不变.根据Proguard文档,该工具不能混淆清单文件中提到的组件.

现在我的问题是:

  1. 如何完全阻止 Android APK的逆向工程?这可能吗?
  2. 如何保护所有应用程序的资源,资源和源代码,以便黑客无法以任何方式破解APK文件?
  3. 有没有办法使黑客攻击更加艰难甚至不可能?我还可以做些什么来保护我的APK文件中的源代码?

security android reverse-engineering proguard

736
推荐指数
18
解决办法
20万
查看次数

使用 LLVM 链接器生成 C 代码

我尝试llvm-g++使用以下命令从编译的 C++ 代码生成 C 代码:

llvm-g++ -emit-llvm -c ./example.cpp -o example.o
llc -march=c example.o
Run Code Online (Sandbox Code Playgroud)

我在运行Ubuntu (Linux 3.16.0-45-generic).

但是,LLVM 静态链接器并没有将 C 代码写入标准输出,而是报告编译后的文件无效:error: expected top-level entity.

如何使用 LLVM 链接器生成 C 代码?

c c++ linker llvm

5
推荐指数
2
解决办法
5589
查看次数

C的命名约定:结构和函数

在探索sigaction.h标题中处理系统信号请求的工具时,我注意到一个结构和一个返回一个函数int被命名sigaction.

即使它看起来在语义上是正确的,因为编译器应该能够在两个定义之间进行推导,为什么sigaction有效C语法的重复定义?

c linux

4
推荐指数
1
解决办法
126
查看次数

Win32应用程序中的窗口将无法正常关闭

原始问题:

尽管我的窗口过程函数能够检测到WM_CLOSE消息,并且调用PostQuitMessage并让Windows继续处理窗口消息,但我有一个窗口在创建后无法立即关闭DefWindowProc.

但是,在通过拖动标题栏移动窗口后,它似乎能够正常关闭.

我的窗口过程函数的代码如下:

LRESULT CALLBACK OnEvent(HWND handle, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_QUIT:
        {
            printf("WM_QUIT\n");
            break;
        }
        case WM_CLOSE:
        {
            printf("WM_CLOSE\n");
            PostQuitMessage(0);
            return 0;
        }
    }
    return DefWindowProc(handle, message, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)

因此,除了将WM_MOVE消息发送到我的窗口或exit(0)WM_CLOSEcase块中使用之外,如何确保我的窗口在创建后立即关闭?

新问题:

传递NULLhWnd参数后GetMessageW,而不是我的窗口句柄,窗口现在正确关闭,因此回答我以前的问题.

因此,为什么GetMessageW函数以前没有WM_QUIT用唯一窗口提供的句柄检索消息,而不是NULL用作hWnd参数?

c winapi

0
推荐指数
1
解决办法
875
查看次数

Rust程序打印的值与预期不同

我正在学习Rust编程语言,并编写了一个包含简单for循环的测试程序:

fn test_func(max_rows: u32, max_cols: u32) {
    for y in 0..max_rows {
        for x in 0..max_cols {
            print!("{},{}", y, x);
        }
        print!("\n");
    }
}

fn main() {
    test_func(4, 4);
}
Run Code Online (Sandbox Code Playgroud)

产生以下内容:

0,00,10,20,3
1,01,11,21,3
2,02,12,22,3
3,03,13,23,3
Run Code Online (Sandbox Code Playgroud)

这与我用C语言编写的输出有所不同:

00,01,02,03
10,11,12,13
20,21,22,23
30,31,32,33
Run Code Online (Sandbox Code Playgroud)

为什么省略'x'值,为什么订单与我的预期不同?

rust

-9
推荐指数
1
解决办法
109
查看次数

标签 统计

c ×3

android ×1

c++ ×1

linker ×1

linux ×1

llvm ×1

proguard ×1

reverse-engineering ×1

rust ×1

security ×1

winapi ×1