自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 C Primer Plus 第6版 编程练习——第3章

4、编写一个程序,读取一个浮点数,先打印成小数占形式。编写一个程序,提示用户输入水的夸。编写一个程序,提示用户输入身高(/英寸),然后以厘米为单位显示身高。编写一个程序,提示用户输入年龄,然后显示该年龄对应的秒数。8.在美国的体积测量系统中,1品脱等于2杯,1杯等于8盎司,1盎司等于2大汤勺,1大汤勺等于。编写一个程序,提示用户输入杯数,并以品脱、盎司、汤勺、茶勺为单位显示等价容量。2.编写一个程序,要求提示输入一个ASCII码值(如,66),然后打印输入的字符。脱数,并显示水分子的数量。

2025-04-17 16:15:08 97

原创 C Primer Plus 第6版 编程练习——第2章

函数在一行打印单词“one”,再调用第2个函数two(),然后在另一行打印单词“three”。1.编写一个程序,调用一次printf()函数,把你的名和姓打印在一行。除了main()以外,该程序还要调用两个自定义函数:一个名为br(),调用一次打印一次“Brazil,除了main()函数以外,该程序还要调用两个自定义函数:一个名为jolly(),用于打印前3条消息,把你的名和姓分别打印在两行、然后,再调用两次printf()函数,把你的名和姓打印在一行。另一个函数名为deny(),打印最后一条消息。

2025-04-17 15:22:52 342

原创 未能安装包“Microsoft.VisualStudio.XXXXX

注册表里,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components处,右键,点击权限,点高级,选中"使用可从此对象继承的权限项目替换所有子对象的权限"今天心血来潮,想升级一下Visual studio,一直用2017用了几年了,现在的AI插件都用不了,包括最新的netcore也都不支持,直接升级2022。升级过程中发现安装总是出错,

2025-04-16 17:09:15 58

原创 高级语言调用C接口(二)回调函数(5)arkts

中的方式一样,对于C接口的处理在Napi层,同样是C/C++写的,所以没有任何类型上的问题。当回调触发时,在Napi层处理,将结构体的数据转换为arkts的类型,或者转换为Json字符串,作为回调参数传递到arkts层,在arkts层对Json字符串进行处理,这样,数据即可传到前端。

2025-04-16 13:11:25 69

原创 高级语言调用C接口(二)回调函数(4)Python

这里重要的点是回调函数中,结构体指针是C代码分配的内存,与python有区别,C的结构体中的字段并没有各种方法和属性,需要注意转换。前面2篇分别说了java和c#调用C接口,参数为回调函数,回调函数中参数是结构体指针。接下来说下python的调用方法。

2025-04-16 13:06:14 132

原创 高级语言调用C接口(二)回调函数(3)C#

由于回调传过来的C申请的内存,结构与C#不一致,必须通过Marshal进行转换,否则会出现内存访问异常。原接口定义请参照高级语言调用C接口(二)回调函数(2)实现、通过继承抽象类,重写抽象接口实现回调的具体逻辑。我们直接来看C#的接口定义。

2025-04-15 17:47:54 170

原创 高级语言调用C接口(二)回调函数(2)Java

接口用于初始化SDK并设置了回调函数。回调函数的参数是一个结构体的指针,首先,我们来看一下C中如何调用该接口。调用方法非常的简单粗暴,接下来,我们看一下JAVA中JNA是如何实现调用的。下一篇将介绍C#的调用方式。

2025-04-15 17:35:30 809

原创 某起名软件逆向分析

9-4-2、逐字节对9-4-1的字符串进行转换,如果当前字符是数字,则与8进行异或运算。9-4-4、9-4-3的计算结果第11、12、7、8、5、6、3、4位拼接为计算结果。9-4-1、将MD5的4、5、13、14、8、9、11、12、1、2、6、7拼接。3、第5位如果是6、7、B、b则第5位为1、如果是8、9、C、c时为2.5、第7位如果是4、5、A、a则第7位为0、如果是6、7、B、b时为1。4、第6位如果为A、B、C、D、E、F、G、H、J、K分别对应0-9。这个程序是.net的,无壳,32位。

2025-04-15 15:04:08 787

原创 高级语言调用C接口(五)结构体(3)-arkts

上一篇文章提到了,arkts和C接口之前还有一个Napi层,这层代码最大的优势就是C/C++编码,这样,我们只需要把数据通过Json格式传递到Napi层,Napi层再定义一个结构体并赋值即可。由于实现方式比较简单,这里就不给示例了,Napi层的调用代码甚至和C的Demo调用接口几乎完全一致,参数获取也比较简单,Json是一个字符串,直接读取即可,Json的转换可能会用到第三方库,个人使用Jsoncpp比较多,其它的也都差不多,个人习惯而已。

2025-04-14 10:13:05 185

原创 高级语言调用C接口(四)结构体(2)-Python

和Java、C#一样,由于高级语言的结构与C的结构体并不完全一样,高级语言的类包含方法,而C的结构体是定义即所见,所以C接口直接调用高级语言的结构体数组地址时,会崩溃,Python也和C#、Java一样,定义为数组并赋值,再将数组转换为连续内存。上一次说了Java和C#调用C接口传递结构体,今天来说一下Python。这个专栏好久没有更新了,主要是坑开的有点大,也不知道怎么填,涉及到的开发语言比较多,写起来比较累,需要看的人其实并不多,只能说,慢慢填吧,中间肯定还会插很多别的东西,更新频率自己也不知道。

2025-04-14 10:04:48 240

原创 OfficePlus去掉PDF文件右键菜单里的PDF转换

今天在吾爱破解论坛看到一个求助帖,说是OfficePlus,安装后,PDF文件的右键菜单里多了PDF转换,想去掉,不知道怎么弄。底下的回复基本都是百度复制或者AI搜索出的答案,大致就是找注册表里CLASSID下的菜单栏相关的值删掉,还有让用右键管理工具的,不出意外,无效!很简单的道理,楼主自己不会百度吗?于是自己官网下载了一个,安装上了,我艹,真在pdf的右键里多了一个PDF转换。既然常规注册表的右键菜单里找不到,那就和OfficePlus本身有关系,注册表里搜索OfficePlus,

2025-04-10 16:02:28 358

原创 SI ObjectBrowser 注册破解

6、license第13-16字节按1、2、3、4字节顺序从KeyTable2中查表并分别减去license第9-12字节按2、3、4、1的顺序从KeyTable中查表得到的位置做差,如果差<1则加上36,得到的位置从KeyTable中获取字符。9、license第25-28字节按1、2、3、4字节顺序从KeyTable2中查表并分别减去license第5-8字节按2、3、4、1的顺序从KeyTable中查表得到的位置做差,如果差<1则加上36,得到的位置从KeyTable中获取字符。

2025-04-09 17:22:37 672

原创 吾爱破解2025新春红包之番外篇

抽奖页面给出了开奖算法,并且每次开奖的blockNumber是事先计算出来的,通过blockNumber可以拿到一个blockHash,再用blockHash和参加人数取模,得到中奖号。flag9,完全没有思路,看其他人的writeup,是攻击AI,让AI泄密flag9,感觉就是自己的知识盲区。很明显,这个flag和get_verify_code.wasm有关系。运行结果里选最小的,让自己的UID拿到中奖号码,在写脚本补充够需要的参与人数即可。flag10,打开抽奖界面,里面有个注释。

2025-02-25 16:16:30 298

原创 吾爱破解2025新春红包之三-Android中级题

整体的逻辑就是根据上面A、CNJAK、getenv和jgbjkb的结果决定调用a还是ao,正确的逻辑应该是A的返回值为0,CNJAK的返回值为0,getenv的返回值不为0,因为java层设置了这个环境变量,同时jgbjkb的返回值为0,这样就能正确的调用a了。第一年做安卓题,斗胆挑战中级,jadx解开apk,运行app,跟着流程走,随便输入了flag,返回"秘钥错误",搜索字符串,竟然搜到了,跟着跳转,来到了一个native接口check。E45C0是我的IDA解析出来的名字,具体实现大致还原如下。

2025-02-18 14:04:29 265

原创 吾爱破解2025新春红包之三Android初级题

首先,apk拖入jadx,查找个人代码部分,发现有两个FoldFragment,FoldFragment1在播放三折叠的宣传MP3,没有连个字符串都没有。文本打开mp3,也没有flag。目标转向FoldFragment2,代码里发现了3个base64的字符串,使用的地方都用同一个接口去解码,直接复制在线解码,发现不是明文。调用接口跟进去发现是xxtea加解密,正己大神还贴心的把加密接口也写进去了。往年红包只玩windows和web,今年web题少,心血来潮发现工具不足啊。

2025-02-14 15:52:47 161

原创 吾爱破解2025新春红包题之二-Window初级题

其实这个程序是先检查字符串长度是否为27,然后再将6b83537e8a30477b3e59362e4c293535340c5b5a5c797f5073747e进行计算,还原成答案,与输入进行比对,如果换成用输入反向计算去与目标字符串比对,难度无疑对新手不太友好。前面有一个je,前面还有一个cmp esi edi,在次下断点并运行,esi的值是6,edi的值是1B(27),显然不等,将je改为jne,继续运行。不停的向下跟,一个27次的循环结束后,flag会出现在ebp-40的地址里,后面会被复制给ECX。

2025-02-14 15:33:05 295

原创 聊聊Win11 24H2 自定义桌面背景

24H2发送0x52c并不会生成3层结构,而是在Program Manager下生成一个workerw,解决的思路就是在我们的程序窗口的扩展式样追加分层式样,并把变成workerw的子窗口。23H2之前的思路是通过0x52c消息让Program Manager变为3层结果,把我们的程序嵌入Program Manager作为子窗口并隐藏workerw2。前几天,手欠,用windows升级助手把系统升级到了24H2,结果再进系统,我自己写的自定义桌面程序显示异常。没办法,尝试改变嵌入位置,但效果都不明显。

2025-01-23 11:33:38 271

原创 关于openharmony线程安全函数的一些坑

PC端回调是同步的,所以不会有任何问题,释放时不会有任何地方去使用这个地址,但harmony不行,回调是异步的,指针释放时,部分回调操作不能保正完成,而且,底层库和napi层也无法用锁或者其它方式同步。查了一下资料,官方的资料并不多,只是给了简单调用示例,后来从部分文字中看出,线程安全函数是把回调放入队列来执行,并发立即执行,这也是为什么回调在接口return之后才执行,因为接口是队列中正在执行的任务。没办法,改逻辑,把回调放到专用线程里,保正线程不会停止,原接口内的各个线程,都不在调用本线程内的回调。

2024-12-03 11:00:56 425

原创 高级语言调用C接口(三)结构体(1)-Java、C#

接口定义可以看出,C#有2重定义,C#调用会比Java更复杂,由于C结构体中定义的char*并非真正的字符串,而是指针,C#的string与char*并不能直接转换,加上汉字乱码问题,所以,调用C层接口前,需要做如下封装处理。上一篇简单说了回调函数,其中回调函数包含更复杂的参数,结构体等,所以,本系列的第三篇先说一下结构体,由于内容会比较多,本篇先说Java(Jna调用、Jni比较复杂,如有需要,后面再单独来将)、C#两种比较常见的开发语言。接下来我们来看一下Java的Jna改如何调用。

2024-11-27 13:59:45 427

原创 高级语言调用C接口(二)回调函数(1)

先来看一下C接口的定义,这个回调比较简单,参数只有一个const char*#else#endif#endif//消息回调函数#endif这里是初始化SDK,并设置消息推送的回调函数,C语言的调用方式比较简单elseJava调用C接口有2种方式,Jni和Jna,Jni需要编写C层代码,运行的适应率更高,包括一些ZF、JF的SM机都可以正常运行,Jna由于运行时需要在临时目录下解压jar包,可能会有权限问题。

2024-11-14 14:59:51 1454

原创 高级语言调用C接口(一)基础类型与基础类型指针的对应关系

C变量类型Java变量类型C#变量类型python变量类型arkts变量类型备注intintintc_intnumberlonguintc_uintnumbershortshortshortc_shortnumberintushortc_ushortnumberlongintintc_longnumber32位系统中,C中的long型占4字节,可以当作int来使用longuintc_ulongnumber。

2024-11-12 13:28:03 601

原创 鸿蒙生态的机遇与挑战

第三,从官方文档看,示例并不多,尤其是我想要找的示例,至少一半找不到。第五,设备能力和权限问题,由于我用的是openHarmony的开发板,在HarmonyOS模拟器里可以运行的东西,到了openHarmnoy的开发板上就各种错误,甚至是syscap导致安装都是问题,对于开发者来说,要有一个适应的过程才行。由于公司做的是硬件产品,设备的控制需要和C层接口打交道,但面试了很多人,基本都是只会ArkTs的,涉及napi的并不多,没办法,自己硬着头皮尝试着做一个最简单的demo给客户,但中间遇到的问题真的不少。

2024-11-12 10:57:48 1059

原创 clang: warning: argument unused during compilation: ‘--gcc-toolchain=Sdk/10/native/llvm/‘

查看clang.cmake(位于Sdk的native/build-tools/cmake/share/cmake-3.16/Modules/Compiler/Clang.cmake)今天看了一下cmake相关的脚本,首先,在ohos.toolchain.cmake(位于SDK的native/build/cmake目录下)要让警告消失,可以把ohos.toolchain.cmake中262和263行注释掉,一般的C/C++库都可以正常编译通过。注意到257、262、263行的内容如图。

2024-11-07 16:13:05 713

原创 消息订阅emitter的一个小坑

发出来的是个300多K的数据,传过来只有10K,查了官方资料并没有特殊说明,只能猜想是emitter最大只能传输10K的数据,毕竟这是个消息订阅机制,大数据还是postMessage比较好。本来是一个很简单的需求,异步采图在主界面上显示,用emitter来订阅并发送消息传数据,由于EventData是json格式,所以图像要先base64编码,界面显示的数据也恰好可以是base64,没有什么问题,于是动手。感觉自己要疯掉了,这么简单一个数据传递,居然不对!记录一下,避免以后再踩坑。

2024-10-30 16:09:02 258

原创 高级语言调用C接口(前言)

后来逐步接触高级语言对C接口的调用,毕竟,底层C开发要比高级语言性能好,这就涉及到一个无法回避的问题,C的很多类型对于高级语言并不友好,比如指针、结构体、函数指针、回调等等。至今用到过的语言也比较多,常见的Java、C#、python,不常见的Delphi,PB以及最近非常热门的鸿蒙等等。开这个坑就是想记录一下自己遇到过的各种花式调用情况,以及遇到的让人头大的问题,以及一些解决方法。当然也会有至今没遇到的情况,边写边看吧。坑先开着,啥时候填也不知道,内容太多,工作之余来写,时间不固定,能不能写完就随缘吧。

2024-10-12 17:46:07 311

原创 openHarmony下USB通信初尝试

鸿蒙napi层也有一套USB的通信接口,官网看了一下,还是有点复杂,需要借助arkts获取deviceid后,传入napi层才可以通信,目前还没有尝试,以后有机会或许可以试一下。拿来嵌入式组的通信库代码,选则出连接设备的代码片段,编译成napi,调试运行,意外的顺利,打开成功了,剩下的问题就是通信了。拿来开发板,插上设备,lsusb看了一下,设备节点正常,shell用户可以正常看到,而且看到节点权限666,感觉有希望。拿来一段简单的通信代码,编译,调用,结果意外的顺利,通信完全正常。

2024-10-08 11:16:13 521 2

原创 线程间通信

SDK初始化接口中有一个推送的回调函数,会把SDK的中间状态等信息推送给调用者,以便和用户交互。那么问题来了,初始化接口不管是在主线程调用还是work线程调用,推送回调接口被调用的时机和线程都是不确定的,重要的问题就是要在任何线程调用回调时,界面都能有反应。主要提供线程间发送和处理事件的能力,包括对持续订阅事件或单次订阅事件的处理、取消订阅事件、发送事件到事件队列等。参考示例略作修改,加入到程序里,目前还没有测试,后面有了结果再更新,总感觉不会这么顺利。官方资料查询了一下,发现了。

2024-09-29 09:42:35 459

原创 C/C++回调Arkts函数(多线程调用)

底层C/C++库需要初始化时,设置回调函数,供其它接口回调时使用,其它接口为异步调用。其中,回调内用了消息订阅,将回调信息发送给主线程,这里是否需要消息订阅,还没测试。

2024-09-27 14:45:48 1027

原创 动静态库快速编译为鸿蒙版本

熟悉IDE的会说,去build目录里复制出来就行了。没错,可以这样,但个人很不喜欢,so文件在build目录里真的太深了,不只目录深,隐藏的也深。可以看到,cmake编译时的命令就在这个文件里,这样就好办了,自己写一个批处理,已有动态库编译成鸿蒙版本就可以和其它CPU架构一样了。仔细观察编译生成的路径,在.cxx目录下,有一个metadata_generation_command.txt文件,打开文件,内容如图。至于Cmakelist.txt的编写,这里就不详细介绍了,其实并不难,而且大多数人也是会的。

2024-09-26 09:36:10 613

CMake Cookbook中文版-自动化编译系统的全面指南及应用

内容概要:CMake Cookbook中文版系统地介绍了如何使用CMake进行跨平台项目配置、编译和测试,涵盖从入门到高级主题。全书内容广泛,既包括基础的项目搭建(如配置环境、编译不同类型的目标文件),也涉及复杂的多语言项目集成(C++, Python, Fortran)、外部库和工具检测、测试和CI配置、高级配置技巧如生成器表达式以及代码版本管理等方面的技术和实践经验。通过丰富的示例和详尽的代码片段,读者不仅可以快速上手简单的项目配置,还可以深入了解CMake在大规模项目管理和持续集成中发挥的作用。 适合人群:对跨平台开发有兴趣或是从事嵌入式、服务器端编程的工程师,以及对现有项目优化或移植感兴趣的开发者。 使用场景及目标:帮助读者掌握高效地管理C++及其他语言大型复杂项目的方法;利用CMake简化构建流程;增强团队协作效率;为自动化测试及持续交付奠定坚实的基础。 其他说明:书中提供了大量的实例工程,可以从Github仓库下载;此外,针对每一章节都有详细的配置指导与故障排查提示。

2025-01-15

银河麒麟高级服务器操作系统中的RPM包构建流程和技术详解

内容概要:本文档旨在帮助软件开发者快速掌握在银河麒麟高级服务器操作系统下构建RPM包的方法。文档涵盖了RPM的基本概念、打包流程、环境搭建、.spec文件编写和具体的打包实例。通过对不同阶段任务的详细介绍,确保开发者能高效地创建、验证并发布软件包,从而提高开发效率。 适合人群:具有一定Linux基础并对RPM软件包有兴趣的开发者,特别是在银河麒麟操作系统环境中工作的技术人员。 使用场景及目标:本指南有助于开发者理解RPM的工作机制及其优势,如简化源码包的复杂性和处理软件之间的依赖关系。它提供详细的步骤指导,让使用者能够在个人或团队项目中顺利集成并应用RPM打包工具。 其他说明:文档中提供了实用的例子,并鼓励读者尝试自行实践整个打包过程。此外还有详细的命令解释和服务联系方式以便遇到问题及时得到支持。最后,附件列出了官方发布的规范文档,进一步补充了正文内容。

2025-01-15

NetSDK编程指导手册(只能楼宇分册)

大华门禁控制器SDK

2025-01-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除