C++多继承虚函数导致的诡异BUG
今天在写DuiMini的控件类时调试遇到了异常,经过几次定位才找到了问题代码段,步过时发现了一个诡异的BUG:我要调用的fun1函数居然进到了fun2函数里面!这是什么鬼?花了几个小时才解决,由于这个问题比较隐晦且编译器不会爆任何警告,特此记录。 一个栗子简化的类层次结构如下: 123456789101112131415161718192021222324252627#include <iostream>using namespace std;class Base1{ public: virtual void foo1()=0;};class Base2{ public: virtual void foo2()=0;};class Test:public Base1,public Base2{ public: void foo1() override{ cout<<"Test foo1\n"; ...
邮件订阅功能上线测试
为了方便大家获得本博客的更新,特地搞了一下邮件订阅功能,由于并不太熟悉具体操作,现在仅限测试。大家可以点击上方的订阅按钮订阅更新邮件,每半个月如果有更新将会发送邮件,您可以随时退订。注:测试发现Gmail邮箱可能出现收不到的问题,QQ邮箱可能进入垃圾箱或被拦截(点击取回即可)。 当然最保险的方法还是RSS订阅,这样就不会遭受各大邮件商的剥削了,本站RSS Feed:https://www.imwxz.com/rss2.xml
微信公众号资源抓取(数据包分析+源码)
本帖所包含的内容仅限技术交流和学习研究使用,禁止用于其他用途!因使用不当造成的一切后果与本人无关! 家里有长辈喜欢听一个微信公众号里面的养生歌曲,觉得每次只能在微信中听很麻烦(据说是为了防盗版啥的),想把文件搞出来就方便多了。于是乎本人进行了一番尝试,成功提取出了文件。其他的资源可以参考修改,理论上也可以获取。 0x00 分析首先通过复制微信自带浏览器的网页链接的方式把地址搞到,然后在电脑上访问,可以打开,然而我们点击听歌的时候出现了验证,只允许从微信浏览器访问。进一步分析网页源码可以看出每个歌曲有一个filesn,点击事件就是把filesn提交给一个GetUrlByFilesn的文件,检查后返回真实地址。 0x01 抓包原本想通过改Referer和UA的方法直接在电脑上访问,不过貌似现在微信把这个给封了,算了简单起见还是直接抓手机包吧。这里我用的是Fiddler,其他工具应该大同小异。 因为是https网页,我们需要装个插件CertMaker for iOS and Android 打开Fiddler,点击菜单栏上的Tools-Fiddler Options-HTTPS,勾选上 ...
橙光制作工具2.0免审核发布破解教程
本帖所包含的内容仅限技术交流和学习研究使用,禁止用于其他用途!因使用不当造成的一切后果与本人无关! 前几天用橙光做了一个AVG小游戏,然而准备给朋友玩的时候发现这货和我之前用的不一样了!现在居然要审核才能发布,并且不支持生成exe等,卧槽,这么坑爹?能忍?搜遍网络没有相关的方法,只能自己动手了。 0x00 分析首先这个在本地是可以通过“测试”按钮玩的,我们就从这里入手。运行游戏,可以看到游戏主进程是一个名为H5OrangeSim.exe的程序我们打开进程的文件位置,发现是在安装目录的版本号\interpreter\H5目录下,并且看到了熟悉的cef框架,而且根据游戏如果发布后可以在网页上玩,猜测是使用了H5来渲染,我们直接运行一下这个文件,发现它停止工作了,显然主程序是要给它传递一些参数才能运行,接下来便是搞主程序了。 0x01 破解查壳发现这个居然是个没壳的WPF程序,那就好办了嘛,反编译出来然后搜索orange字符串……很容易找到一个名为OpenGame_EXE文件,下上断点运行诶怎么没有停下来啊,我们好像找错了……根据一般的命名,我们搜索包含test的函数试试,找到一个Ope ...
Junior 0CTF 2017 writeup
哇萌新第一次参加CTF居然摸了一个rank10还有0x100拿,美滋滋~看上去高中时瞎搞搞还蛮有用的,然而这次题目还是对萌新不友好……其他几个参加的同学看了题目表示不知所措XD由于php、python语法仅限于简单改写,crypto仅会暴力,reverse linux环境完全不懂,所以比赛是查了大量的资料,也算是学习吧。 QQ Group签到题啦啦啦~ aes-duet这道500分的题目是我的得意之作啊哇咔咔咔,拿了唯一的一血啊红红火火恍恍惚惚~~题目意思就是有一个8位的key(hex 0开头8结尾)然后把I am a piece of lovely plaintext前4位*4倍AES加密后再用后四位*4AES一次,由于并不会各种神奇操作,只能暴力喽,不过这里有个trick,如果单纯枚举key的话复杂度太高,大概要有256^7,显然目前是不太可能算出来,不过正是由于他前后分别加密的,我们可以枚举前4位把一次加密的密文存下来然后再枚举后四位解密密文去表里查,这样复杂度就降低为256^3*32,已经可以接受了。主要代码(不太会py,勿喷): 12345678910111213141516 ...
handsome主题自定义-自定义图标
本教程均在handsome 4.1.1中测试通过,不保证兼容其他版本,请自行修改相应步骤。 handsome提供了一些主题,然而在4.0之后把fa图标删了……很多人(包括我)还是需要的,不过原版的fa太大了,下面我们来利用fontello来阉割一下下。 自定义图标 我们登陆fontello网站,把主题目录assets/fonts/fontawesome下的fontello.svg文件拖上去,如图: 将Custom Icons里的所有图标选中,然后再选上需要添加的图标,注意最后在自定义里把前缀改成fa-,点右上角大大的Download就可以把文件下下来了。 覆盖文件并修改css 将压缩包font文件夹下的东西全部覆盖到assets/fonts/fontawesome目录 打开assets/css/handsome.min.css,这里你需要一个CSS格式化工具,将它格式化 打开之前压缩包css文件夹下fontello.css文件,也格式化一下,然后复制图中的这串数字 回到handsome.min.css文件,查找fontello.eot?,然后把从这之后的所有图中的数字替换为步骤3 ...
Markdown简明教程
经常写博客或者文章的同学们肯定不会对Markdown感到陌生,因为它实在是太太太方便啦!如果你不会,没关系,花几分钟学习一下,相信你会爱上它的! 你将会在这篇文章里看到: MD的使用范围 MD的基本语法 MD的增强语法 你不会在这篇文章里看到: 哪种MD编辑器比较好 MD和其他语言的优劣比较 现在我们开始吧! MD的使用范围唔……现在一般的博客都支持MD的,比如typecho就是原生支持,论坛如果装了discuz的MD插件的话也是可以支持的。还有我们Github的readme,就是要用MD写,啊还有逼乎也是支持的! MD的基本语法这里有份很好的中文手册大家看看很简单的:中文手册 MD的增强语法增强语法有的MD解释器可能不支持,请试验支持后再使用! - 使用[TOC]引用目录 - 使用“```”+“语言名称”加强语法(可以使用增强插件) - 使用`[^内容]`表示注脚 - 待办事宜Todo列表:使用带有 [ ] 或 [x] (未完成或已完成)项的列表语法撰写一个待办事宜列表 - 表格 123| 表头1 | 表头2 | 表头3 | 表头4 || ------ | :--- ...
DuiMini中的异常处理
我们不使用 C++ 异常. ——Google 开源项目风格指南 出于以下原因,DuiMini将禁用C++异常: 效率和库体积控制 便于和其他禁用异常的项目兼容 本人不喜欢C++的异常处理 因此我设计了一个UIException用于处理异常并在必要时终止程序,而所有的异常处理都放置在Manager层中(关于模块化设计),接口统一返回错误码进行判断。因此: 调用最低级的Manager层总是安全的(除非特殊说明,一般处于该层的异常均为致命异常,会直接终止程序) 调用由Manager组成的更高一级的Manager层一般也是安全的,因此无需处处考虑返回异常(许多函数都保证执行成功)
DuiMini的模块化设计
基本需求是可以方便地删改不同的组件,比如添加一种资源加载的方法或者新的渲染方式。一般有三到四层包装:首先是一个IUIXX接口类,给出所有组件的对外接口,然后是继承自接口类的组件(涉及第三方库的可能在Util中初步封装),最后是一个Manager,通过多态实现组件的调用。当然,每个组件也可作为Manager再次分级。
开源库rapidxml和zlib的冲突
DuiMini准备用rapidxml解析xml界面配置,zlib解压文件,本来两个都是非常好的库,然而…… WTF编译报错:XXX语法错误:“” 还有一堆乱七八糟的东西……什么鬼啊,一开始我以为是我使用的问题,然而和网上教程对比了一下没有什么问题啊,试了半天发现这个错误极其诡异,有时候报有时候不报,然而我要用的地方它就报了……看错误信息貌似是和zlib存在冲突(调整头文件引用顺序也可看出),百毒搜搜没什么东西,心态崩了…… 问题出现回去后用“不存在”搜索引擎一查,果然百毒还是百毒,歪果仁早就遇到过了这就是一个冲突的BUG,两个都有一个叫alloc_func的函数,rapidxml还好有命名空间保护,然而zlib不上路子直接暴露在外面……于是神奇的编译器就会在模板实例化时把zlib的func当成rapidxml的了…… 解决方法网上的方法非常暴力简单,搜索zlib或rapidxml中的alloc_func,改成alloc_func1或者其他的就行了……有兴趣的朋友可以试试给zlib加命名空间。 最后还是要说,真TM坑……