Android逆向技术50——Android集成Botan库

Android逆向技术49——Android集成Botan库

缘起是,发现这个库好久了,但是呢,一直也没在Android当中给用用,所以突然想起来,然后给搞一下,在Android当中来使用,讲实话,这个库的代码风格和逻辑写的还是蛮不错的,如果有兴趣的读者可以看一看。

环境准备

这里,我还是直接在mac上编译处理的,理论上在Linux上问题应该也不大,win上的话,读者们可能就需要自己尝试一下了。

  • NDK版本,这里采用的是25.1.893739

编译工作

这里,因为官方给出了具体的方案,这里咱们稍微改一下,改成和目标NDK一样的版本。

export AR=/Library/Android/sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-a
export CXX=/Library/Android/sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android33-clang++
./configure.py --os=android --cc=clang --cpu=arm64
make

按照上面的命令执行,还是非常顺利的,几乎没有什么问题就编译完成了。编译之后,我们会得到两个文件,一个是编译之后的头文件,另一个是编译之后的.a文件。

集成工作

集成工作也非常的简单,如果看过我之前写的一篇集成其他的库的话,很容易就改改就能集成进去了。

移动文件到相应目录

具体结构如下所示,复制头文件和.a文件。

修改构建文件

# ...
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing -std=c++20")

project("botandemo")

INCLUDE_DIRECTORIES(include)

add_library(libbotan
        STATIC
        IMPORTED)

# ...

set_target_properties(
        libbotan
        PROPERTIES IMPORTED_LOCATION

        ${CMAKE_SOURCE_DIR}/lib/arm64/libbotan.a)
        
target_link_libraries( # Specifies the target library.
        botandemo
        libbotan

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})

这里需要注意,SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing -std=c++20")这个是必须要加的,否则的话,编译会报错,因为这个用了一些C++的特性,如果说不支持的话,这个库是用不了的。

测试成果

简单的写一个例子,有关于这个库的一些使用,也可以看下我之前写过的文章,介绍过部分的使用方法。

#include 
#include 
#include 

#include "botan/hash.h"
#include "botan/symkey.h"

std::string md5(const std::string &message) {
    auto hash = Botan::HashFunction::create("MD5");
    auto result = hash->process(message);
    return Botan::OctetString(result).to_string();
}

extern "C" JNIEXPORT jstring JNICALL
Java_com_littleq_botandemo_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(md5(hello).c_str());
}

到这里,整个库就搞好了,非常的快速。

总结

对于这个库呢,是用纯c++写的一个密码学库,并且整个代码风格,我个人还是比较喜欢的,放到Android当中呢,就可以愉快的使用了,并且吧,这个库目前来说用的范围要比openssl要低一些,如果不熟悉,追进去分析代码,还是比较酸爽的。

参考资料

  • https://botan.randombit.net/handbook/building.html#for-android[1]

下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/15220,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?