- 博客(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中文版-自动化编译系统的全面指南及应用
2025-01-15
银河麒麟高级服务器操作系统中的RPM包构建流程和技术详解
2025-01-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人