- 博客(2237)
- 资源 (604)
- 收藏
- 关注
原创 openssl3.2 - exp - 用base64后的字符串作为配置项的值
今天解析自己封装的内存型的openssl 配置数据,发现openssl并不支持配置项的值为base64之后的直接字符串。
2024-04-16 23:37:06 1006
原创 c++ - 动态载入DLL接口,可以给IDA静态分析增加一点麻烦
工程中用到了PostMessage来压入任务,太扎眼了。在IDA静态分析时,看API引用,很容易看到压入任务的实现。想动态载入API, 看看静态分析效果如何?网上有大神开源了一个动态载入DLL的封装类(http://www.codeproject.com/KB/DLL/LateLoad.aspx)以前也用过,只是用来方便动态调用DLL接口。这次用,主要是看看用IDA静态分析时,动态载入的API接口是否容易识别?写个demo(vs2019 vc++ console), 转圈打印字符串. 如果圈数>10,
2024-04-14 17:36:47 387
原创 vs2019 - detected memory leak
用VS2019建立的控制台工程, 在调试模式下, 如果出了内存泄漏,是没有提示的。// 网上的大佬在2010年就给出了解决方法。
2024-04-13 19:09:12 859
原创 c++ - pointer convert - class member function’s pointer <==> void* - v1
在工程中要将类非静态成员函数地址传给其他类(e.g. post一个消息, 带上一个类函数回调指针)。前面做过一个不靠谱的实验,不理想。今天查资料时,看到前辈同学的思路,很受启发。做了实验,只要定义一个结构体,里面定义一个类非静态成员函数指针的变量就行。}TAG_FUN;类非静态成员函数指针的变量赋值也不用强转,在不同对象之间传的是结构体实例的指针, 而不是直接传类非静态成员函数指针。// 赋值// xx是类非静态函数指针地址。// 传给其他对象时。
2024-04-11 21:47:43 223
原创 openssl3.2 - exp - class warp for sha3-512
前面实验整了一个对buffer进行sha3-512算hash的函数。实际用的时候,要对几个buffer连续做hash. 前面封装的统一做hash的函数不适用。重新封装了一个类,只要在类的生命周期中,就可以随时对连续的buffer(可能不在一个函数中)做hash的update.
2024-04-11 13:07:23 303
原创 openssl3.2 - exp - zlib
客户端和服务端进行数据交换时,如果压缩一下要交互的数据,可以节省带宽。如果数据是文本型, 压缩率特别大。以前用zlib库单独实验过,写起来还挺麻烦的。正好这次已经将zlib特性加入了openssl(openssl3.2 - 编译 - zlib.dll不要使用绝对路径), 试一下用openssl来压缩/解压缩数据方便不?用openssl做zip操作比直接用zlib库操作方便多了。openssl的封装真优秀。
2024-04-10 16:07:11 423
原创 VS - 显示预定义宏的函数
MS官方有文档(),指出了VS中的预定义宏。看起来有点用,封装了一个函数,用来检查这些预定义宏的值。在console, win32 desktop app, mfc app中都实验了,好使。
2024-04-04 17:03:10 230
原创 IDA8.3 - make sig
有个reverseMe用VS2015 x64 release static MFC Dlg写的,IDA8.3只能识别一部分库函数。想做个VS2015的IDA sig库, 让IDA8.3加载sig库后再分析。
2024-03-30 11:29:17 797
原创 win10微软拼音输入法 - bug - 在PATH变量为空的情况下,无法输入中文
在网上看到很多人吐槽微软拼音输入法的bug,bug多种多样我偶尔会遇到网上资料上说的bug, 如果是偶发的bug, 作为作者,MS不解决能说的过去。毕竟软件运行环境很复杂。但是我昨天做实验,遇到一个必然能使win10微软拼音输入法不能输入中文的bug. 如果微软的大神看到了,再不去解决, 就太渣了。
2024-03-28 11:25:53 801
原创 解决PATH变量污染的问题
随着不断安装新软件, 可能多个软件中都有一个同名的被公用的程序。这些同名软件的版本可能并不相同。不同软件对于公用的程序(e.g. cmake, perl,openssl)的版本要求可能并不一样。这时, 运行目标软件之前,可能就要调整PATH变量中的条目顺序。否则就可能引起程序运行失败或异常。还有个问题,PATH变量的最大长度是有限制的。最后可能装不下,导致手工编辑调整PATH变量顺序变得不可能。
2024-03-28 10:18:59 792
原创 IDA - 字符串表的增量比较
想将程序中能出现在IDA分析的字符串表中的字符串做一下处理, 不让逆向工程师直接分析.首先就是将在程序中的字符串让IDA找出来.然后将IDA字符串表保存起来为文本.然后写程序再用IDA分析新增量程序的字符串表, 再保存字符串表为文本.然后BC4比较, 就知道自己程序中新增了哪些字符串, 然后对这些字符串做处理.
2024-03-22 12:13:15 454
原创 IDA - 让字符串资源不出现在字符串表中的方法
如果在程序中直接使用了字符串, 就会在IDA的字符串表中被看到, 给了逆向工程师明显的线索.以前在给IDM打补丁时, 看到作者使用了一种隐藏字符串的方法. 一个一个字符的给字符串赋值.当时就在想, 这有用么?不过当时不是依赖这个字符串的线索, 也就没在意.今天正好做了一个实验, 验证了这个想法.如果给字符串赋值, 是用字符来赋值, 确实管用.如果是用字符串赋值, 即使字符串再短(短到一个字符), 也会出现在IDA的字符串表中.
2024-03-22 11:30:29 281
原创 openssl3.2 - exp - BIO_push()超过2个节点的应用- 以(aes-128-cbc + base64)为例
BIO_push()形成了一个链.理论上, 多个BIO连在一起, 只需要向BIO链头写数据, 然后BIO_flush(链头), 就可以从BIO链尾读出已经处理过的数据.这样, 就不用逐个处理每个逻辑节点的数据输入输出, 简化了逻辑处理.在openssl源码中找例子, 没找到. openssl中, 能看到的都是BIO_push(bio_head, bio_tail), 然后就向bio_head中写, BIO_flush(bio_head), 从bio_tail中读, 结束.
2024-03-21 12:37:40 1094
原创 openssl3.2 - exp - base64 / unbase64
想将2进制内容放到配置文件中, 作为配置项的值.那先base64一下, 变成可见字符串后再写入配置文件.先看了官方的命令行实现.然后从官方命令行实现, 迁移出一个调用openssl API来干活的版本.自己测试迁移后的版本时, 细节还是挺多, 不像记录官方实现那么容易.对BIO_push()的使用有了进一步的认识.
2024-03-20 16:46:58 555
原创 openssl3.2 - exp - aes-128-cbc
想将工程中用到的字符串明文用openssl的对称加密算法加密一下, 防止逆向静态分析, 只作为字符串编码/解码的作用.只是为了防止逆向静态分析, 起到一个编码/解码作用, 不介意别人知道密钥是啥.看了一下openssl性能(AES性能大概是2000MB/秒, AES256比AES128稍低)用openssl speed 列出的算法(openssl3.2 - exp - openssl speed test), 想选其他强度更低(速度更快)的其他对称加密算法, 好像没有啊. 非主流的算法, 用opens
2024-03-19 19:40:52 1216
原创 openssl3.2 - exp - openssl speed test
想了解一下openssl执行算法时的数据处理速度.查资料, openssl本身有测试功能帮助文件 => D:\3rd_prj\crypt\openssl-3.2.0\doc\html\man1\openssl-speed.html。
2024-03-18 14:24:38 747
原创 openssl3.2 - note - Writing OpenSSL Provider Skeleton
到了openssl3.x, engine已经加了弃用的标记.看了官方文档 Writing OpenSSL Provider Skeleton, 做个笔记这个官方文档有用, 看懂后, 可以将自己的算法(或者硬件加密设备)接入openssl.这个官方文档由openssl Provider架构的作者亲自讲解, NB.学到东西了.这个官方demo, 如果用文字将细节描述出来, 挺难的. 毕竟不是一个知识点.主要体会都写在复现工程中了, 这里总结一些零碎.
2024-03-16 17:54:54 1071
原创 openssl3.2 - note - Decoders and Encoders with OpenSSL
看了官方文档 Decoders and Encoders with OpenSSL, 做个笔记。
2024-03-15 15:00:51 648
原创 openssl3.2 - note - Getting Started with OpenSSL
看到官方文档 Getting Started with OpenSSL, 记录一下笔记。
2024-03-15 12:40:26 373
原创 openssl3.2 - exp - get ecc share key from (ecc privkey sender + ecc pubkey receiver)
用命令行从一方ecc私钥 + 另一方ecc公钥中推导出共享密钥的命令行如下单步调试opessl.exe源码, 将这个实现抽出来, 封装了函数.测试后, 程序生成的ecc共享密钥和命令行生成的相同.修正了 load_key(), 载入私钥buffer/公钥buffer都能得到有效的EVP_PKEY*
2024-03-13 15:43:07 355
原创 openssl3.2 - exp - export ecc pubkey from ecc priv key
前面实验已经生成了ECC私钥, 现在做从ECC私钥(内容为公私钥对, 里面既有私钥信息, 也有公钥信息)导出ECC公钥.实验对应的命令行为单步调试, 发现命令行实现用的OSSL_STORE_open_ex(), 这个很难受, 没办法移植. 里面没有openssl API可用.还好运气不错, 前面实验有从buffer load key的实现, 改了一下, 可以正常从buffer载入到私钥的EVP_PKEY*然后就可以按照openssl命令行的实验进行移植了, 机智:P。
2024-03-13 12:36:33 660
原创 openssl3.2 - exp - generate ecc priv key
前面实验已经将ECC加解密的流程用openssl命令模拟出来了.现在开始将ECC加解密流程中的知识点从openssl.exe源码中迁移到自己工程.先迁移了一个命令如下封装了一个函数, 产生ecc密钥到buffer, 好使.
2024-03-12 19:01:41 403
原创 openssl3.2 - exp - 用openssl命令行来模拟ECC加解密的全流程
工程中要用到ECC加解密, 先去查了资料.在网上能查到一些大佬们写的ECC加解密实现(基于openssl API), 不过写的都比较早. 仅仅作为参考.openssl API并不向下兼容, 只要换了openssl版本, 大概率程序得改(改多该少的问题).从网上找到的第三方代码, 大概率不能用(API的名字都不同). 而且网上能查到的实现, 都不说自己用的openssl具体版本.
2024-03-12 15:48:45 656
原创 openssl3.2 - 官方demo学习 - encode - ec_encode.c
官方demos/encode 目录中给了2个例子工程功能是载入(RSA/ECC)公钥, 然后自己就可以拿内存中的公钥对象干活了.刚开始过官方demo时, 没明白.现在回头看, 挺简单的.昨天已经将rsa_encode.c搞定了.现在准备做ec_encode.c的实验.肉眼分辨这2个.c, 区别很小. 用BC4看了一下区别, 主要是算法不同.openssl的高级接口封装的真好, 类似的算法使用, 唯一的区别是算法名称不同.
2024-03-11 12:49:08 725
原创 openssl3.2 - exp - 选择最好的内建椭圆曲线
在openssl中使用椭圆曲线, 只允许选择椭圆曲线的名字, 无法给定椭圆曲线的位数.估计每种椭圆曲线都有固定的位数(bit prime field)openssl.exe有命令可以列出全部的椭圆曲线列表比较每种椭圆曲线的质数域位数, 挑出最大的那个.可知, 质数域位数最大的椭圆曲线有2个 : sect571k1 或者 sect571r1, 位数都是571位.
2024-03-10 17:42:15 478
原创 openssl3.2 - exp - export RSA pubKey from RSA privKey on memory
官方给的例子(openssl3.2 - 官方demo学习 - encode - rsa_encode.c)是基于文件操作的.我的工程只需要openssl 操作内存数据, 改了一个操作buffer的版本.从内存中的RSA私钥数据, 导出RSA公钥来用.
2024-03-10 14:49:46 525
原创 openssl3.2 - 官方demo学习 - encode - rsa_encode.c
上次学习官方demo - rsa_encode.c 时, 程序要在UI上输入东西, 不知道输入啥, 就先放着.现在需要非对称加解密的例子, rsa_encode.c就是相关的demo, 必须搞懂啊.现在回过头来再看, 挺简单的.估计当时几百个demo摆在哪里, 太着急了. 内心必须平静才能将事情做好:P功能 :从RSA私钥数据中导出RSA公钥.如果给出输出的口令, 可以导出公私钥对.不过, 谁也不会直接导出私钥(知道可以从私钥数据中导出私钥, 有这么回事就行).
2024-03-10 11:51:08 323
原创 openssl3.2 - exp - 可以在命令行使用的口令算法名称列表
上一个笔记, 还有个疑问.openssl pkey -in app_key3.pem -out app_key5_pwd.pem -outform PEM -passout pass:111111 -算法名称如果PEM/DER互转时, 要想转换后的文件带口令保护 就需要指定用哪种算法来执行口令加密算法.并不是随便哪一种可见的算法名称就能用的.算法有限制算法不能有 EVP_CIPH_FLAG_AEAD_CIPHER 标记模式不能是 EVP_CIPH_XTS_MODE。
2024-03-09 21:45:48 963
原创 openssl3.2 - exp - PEM <==> DER
想将客户端私钥 + 服务端公钥 数据转成 C数组, 放到客户端工程中.用openssl默认生成好的证书, 公钥, 私钥等数据, 都是PEM格式的.PEM格式的数据有明显的标记, 可以看到PEM数据的用途.如果有人逆向客户端程序, 很容易看到线索.就想着, 将PEM格式文件转为DER格式文件, 然后将DER格式文件转成数组, 再放入客户端程序来用, 这样好一些.查资料时, 看到大部分例子都是拿证书(x509)做的例子.
2024-03-09 16:51:01 1064
原创 openssl3.2 - exp - generate prime
openssl3.2.命令行可以生成质数单步调试openssl.exe工程, 整理了一个函数, 用openssl API来产生质数.openssl命令行是将结果打印到UI上, 我是要将大数结果放到buffer中.查了openssl源码, 可以用BN_bn2binpad()来干这个活.
2024-03-09 13:18:07 449
原创 C++ - 多个buffer合并成一个buffer的管理类
客户端要向服务端提交包含在多个buffer中的信息, 如果提交多个buffer(文件), 挺麻烦的.如果将这些buffer(文件), 压缩成一个文件, 处理起来也不是很方便.尝试将多个buffer封装到一个buffer中, 最终将封装好的buffer(写成文件也行)给服务端, 只需要提交一次.封装了一个管理类, 可以向管理类push多个buffer, 最后调用接口, 得到一个完整的大buffer(包含所有压入的小buffer).
2024-03-08 15:31:07 424
原创 openssl3.2 - exp - AES-256-GCM
工程中要用到对称加密, 没得选, 要用AES256.在openssl3.2中, AES256加解密的种类有好多种.查了资料, 用AE-S256-GCM不错. 如果密文被修改, 就无法解密成功. 不用再另外传HASH给解密一方(让对方自己算是否密文被修改).
2024-03-07 17:30:48 511
原创 openssl3.2 - exp - 产生随机数
要用到openssl产生的随机数, 查了资料.单步跟进去, 看到主要就是调用了一个RAND_bytes(), 没其他了.官方说, 这个函数不一定会成功, 所以一定要判断返回值是否为1.看openssl实现可知, openssl可以产生任意长度的随机数.不用特意初始化随机数, 只要将openssl默认的初始化函数都调用到就行. e.g. 程序入口处调用自己总的openssl初始化函数.// 如果不需要检查openssl的内存泄漏, 就注释掉下面2行的内存分配函数的hook.
2024-03-06 18:36:06 507
原创 小工具 - 文件转C数组文件(.h, .cpp)
想在程序里面包含一些文件(e.g. 公钥.pem, 或者内建的一些配置文件), 只通过内存来操作这些文件.这些嵌入的文件可以作为资源放在EXE内.但是openssl库是跨平台的, 如果以后要在linux下用, ELF文件好像没有资源这一说.为了可能的扩展性, 准备将程序内嵌的资源文件用C数组代替.这就涉及到预备动作, 将文件转成C数组所在的.h.
2024-03-05 18:46:57 177
原创 VS2019 - error C2653: 不是类或命名空间名称
工程开了预编译头包含.编码中, 随手写一个类, 将功能函数加入, 还没开始用这个类, 先习惯性的编译一下.StringOpt.cpp(12,13) : error C2653: “CMyStringOpt”: 不是类或命名空间名称单独将这个类(.h, .cpp)包含进我的一个正常的工程模板(vs2019 c++ console), 没问题…
2024-03-05 12:21:37 423
原创 openssl3.2 - exp - 内存bio操作(建立,写入,读取)配置
我的应用的配置文件是落地加密的, 无法直接用openssl配置接口载入读取.应用先将加密的配置文件解密(openssl官方给的demo工程中有对文件的加解密例子).从明文buffer中载入配置, 然后就可以用openssl的配置接口(BIO为入参)读取配置项的值.做了实验, 用了1天搞定了. 封装了一个配置类. 可以在内存中建立配置, 写入配置, 读取配置.在内存中建立配置,写入配置在服务端用.客户端只用在内存中读取配置的接口.
2024-03-04 19:04:27 491
原创 COM - IWbemClassObject对象属性的遍历
MS官方有一些具体的IWbemClassObject属性的说明, e.g.如果是头一次玩(或者是过了一段时间去玩), 该取哪个属性, 很难讲, 谁知道里面是啥. 看官方描述, 也是知道个大概. 还得拿名字取, 一个一个去实验. 这很麻烦.因为很麻烦, 就在想, 是否可以遍历出这个IWbemClassObject*, 先看一下, 再有目的的取中意的属性值.没查到遍历IWbemClassObject的资料.网上比较常见的代码为给定obj, name, 执行后, 得到value. e.g.
2024-03-03 16:30:03 602
原创 COM - get VARIANT value - .vt = (VT_BSTR | VT_ARRAY)
取到一个VARIANT值, .vt = 0x2008, 查了一下, 0x2008 = (VT_BSTR | VT_ARRAY)查了资料, 这个vt = 0x2008是BSTR的数组.看看咋取值?网上就没查到啥资料.去查微软的例子库, 查到了. 封装了一个函数.还是官方库靠谱, 比网上零散的资料好的太多.
2024-03-03 10:52:59 181
原创 CE - cheat-engine-7.2/7.5 编译
找到一个CT脚本, 只支持CE7.2版本, 在当前官方最新版本CE7.5上无法运行.那从源码编译一个CE7.2吧.
2024-03-01 10:43:37 478
quicktimesdk 7.3.0.70 for windows
2015-05-18
pcasm-book-simplified-chinese.zip
2014-05-09
Advanced-Windows-Debugging-sources-awd.zip
2014-04-28
TrueCrypt 7.1a Source.zip
2013-11-01
filedisk-17-org.zip
2013-10-31
Sysinternals_Source.zip
2013-09-16
vs2010_Sample_C_plus_plus.zip
2013-08-08
DebugViewV4_81.zip
2013-03-13
srcSpyxx.zip
2012-09-30
ProcessExplorer
2011-11-05
cppunit-1.12.1.tar.gz
2011-08-30
STLport-5.2.1.tar.bz2
2011-08-20
工程目录结构模板设计_2011_0309_2054
2011-03-10
ResourceHack
2010-11-26
NTFS文件系统扇区存储探秘_电子书和随书光盘.7z
2019-03-18
Linux C程序设计王者归来_book_cd.7z.004
2018-08-22
Linux C程序设计王者归来_book_cd.7z.003
2018-08-22
Linux C程序设计王者归来_book_cd.7z.002
2018-08-21
Linux C程序设计王者归来_book_cd.7z.001
2018-08-21
eclipse-java-mars-2-win32-x86_64.zip
2017-04-21
International standard ISO/IEC C++98
2015-12-25
book code C语言名题精选百则
2015-12-16
depends22_x64.zip
2015-07-26
C++_Templates_The_Complete_Guide_book_code.zip
2015-06-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人