置顶随笔

【基本信息】
将自己的想法付诸行动,那才是真正的有意思。

【更新列表】
 Release 2017-02-10
==============================
 Release 2016-11-02、Release 2016-02-25
==============================
 Release 2015-07-14Release 2015-03-23Release 2015-01-28Release 2015-01-13
==============================
 Release 2014-11-18、Release 2014-08-19Release 2014-07-10Release 2014-06-06Release 2014-05-30、Release 2014-05-14、Release 2014-04-29Release 2014-04-09Release 2014-03-23Release 2014-03-04、Release 2014-02-26、Release 2014-01-24Release 2014-01-03
==============================
 Release 2013-12-31Release 2013-12-03、Release 2013-11-26、Release 2013-11-05Release 2013-10-14Release 2013-09-29Release 2013-09-10、Release 2013-08-22、Release 2013-08-09Release 2013-07-09Release 2013-07-08Release 2013-06-01、Release 2013-05-09、Release 2013-04-22Release 2013-04-12Release 2013-04-07Release 2013-03-29、Release 2013-03-24、Release 2013-03-16Release 2013-03-07Release 2013-02-26

posted @ 2012-09-02 00:00 CrHackOS 阅读(726) | 评论 (2)编辑 收藏

posted @ 2011-06-18 12:48 CrHackOS 阅读(2687) | 评论 (11)编辑 收藏

2017年2月12日

  有一些程序之所以无法在 WinXP 下运行,除了子系统版本号之外,还有编译器 C 库的原因。VC2012 和 VC2013 在打某个补丁之前编译出来的 EXE/DLL 会使用到 Vista 以后才有的系统 API 函数。无法运行的现象是:“无法定位程序输入点 XXX 于动态链接库 KERNEL32.DLL”。在没有源代码重新编译的情况下,我做了一个中间跳转的代理库,基本可以解决这个问题。原理很简单,就是系统有这个 API 函数就直接跳转过去,没有就使用自己实现的替换函数。下载地址在这里:https://github.com/prefetchnta/questlab/raw/master/bin/kernel33.dll。由于这个只是用来解决我所遇到的无法运行的问题的,因此并没有补完所有 WinXP 缺失的函数(也不可能全补完),同时只映射了绝大部分 KERNEL32.dll 的 API 函数(大概 99%),所以并不能解决所有的此类问题。但是原理上是行得通的,而且也已经开源了(QuestLAB 里的 BackPort 子项目)。使用的方法就是把 EXE/DLL 导入表的 KERNEL32.dll 字符串改成 KERNEL33.dll 即可。

posted @ 2017-02-12 20:15 CrHackOS 阅读(13) | 评论 (0)编辑 收藏

2015年3月19日

  选择 v120_xp 平台工具集即可使程序兼容 XP 系统。其实质就是加了一个 _USING_V110_SDK71_ 的宏,使用老版本的 Windows SDK,来防止用到 XP 没有的系统 API。另外就是链接器里把子系统的版本号定义成 5.1 了(默认是 6.0)。我做了一下实验,发现子系统的版本号只对 EXE 有效。6.0 的 EXE 在 XP 下运行会提示不是有效的 Win32 程序,而 DLL 似乎不会受到这个限制。所以只要没有用到 XP 没有的 API,VC2013 编译的 DLL 可以直接使用,而 EXE 相差的其实就是那个版本号。(这里的 VC2013 是打过最新的 Update 的,XP 是 SP3 的。)

posted @ 2015-03-19 16:02 CrHackOS 阅读(385) | 评论 (0)编辑 收藏

2015年1月24日

Open source libraries for Windows.
https://github.com/prefetchnta/mybuild



  官方只有 3.02 版的 VS2008 编译的最终二进制。为了完全去掉 WinSXS 的 CRT 依赖(强迫症),花了一天时间把所有依赖库全都用 VC10 编译了一遍(网上有个不纯洁的版本,混杂了调试版的 CRT),顺便都升级到最新的了。以后用到的一些开源库(没有官方二进制或依赖库还是几万年前的版本)也放到这个仓库里来。

posted @ 2015-01-24 17:12 CrHackOS 阅读(227) | 评论 (0)编辑 收藏

2014年8月16日

  最近在玩新唐的 N32926。这颗芯片最大的优势就是把 DDR 内存和 ARM9 的芯片做在一起了,提供非 BGA 的芯片封装(QFP128)。比起三星之类的硬件可以简单不少,性价比也不错。缺点就是,可能是封装管脚太少的缘故,很多功能都是复用的,导致管脚资源紧张。例如,以太网接口和8位以上的 LCD 屏接口是冲突的。以太网切换到第二端口上又和一个串口冲突。本来芯片上就只有两个串口。这就造成,所有的串口设备必须要挂在同一个串口上,用一个模拟开关芯片去切换。可恶的是,Linux 内核和控制台也会时不时的输出东西。但是又不想彻底关掉它们,到时候还能看看调试信息。所以就去找了一下如何临时关闭控制台输出的方法。
  临时关闭控制台输出(打开控制台输出即是把 tty0 重新设置为默认终端输出):
1 int fd;
2 
3 fd = open("/dev/tty1", O_RDONLY);
4 if (fd >= 0) {
5     ioctl(fd, TIOCCONS);
6     close(fd);
7 }
  临时关闭内核信息输出:echo 0 > /proc/sys/kernel/printk;重新打开内核信息输出:echo 7 > /proc/sys/kernel/printk。
  这样,要用串口设备的时候,就先临时关闭,然后开关切换,搞完之后再切回来,最后打开输出。好在使用的串口设备都是被动的,可以临时用一下的,不用一直挂在上面,不然就麻烦了。

posted @ 2014-08-16 13:23 CrHackOS 阅读(4512) | 评论 (1)编辑 收藏

2014年3月17日

(1)选取三个素数:P、Q、E;
(2)计算 N = P * Q,F = (P - 1) * (Q - 1);
(3)求方程 E * x - F * y = 1 最小整数解 D;
(4)(E,N) 为公钥,(D,N) 为私钥;
(5)加密过程为:C = (M ^ E) mod N(C 为密文,M 为明文);
(6)解密过程为:M = (C ^ D) mod N(C、M 不能大于 N);
(7)P、Q 必须是有一定长度的强素数,使得 N 因式分解很难;
(8)P、Q 之间最好相差很大,一般相差个几位;
(9)E 不可取得太小,一般取16位的素数,65537是一个常用数;
(10)Java 下 RSA 和大整数运算的数据存放方式都是大端格式。

posted @ 2014-03-17 13:55 CrHackOS 阅读(204) | 评论 (0)编辑 收藏

2013年3月24日

(1)EditPlus
  这个是我写代码的主要工具,几乎所有的代码都是用它写出来的。功能虽然没有其他编辑器或 IDE 那样强大,但是配置容易,简单清爽,上手很快,并且功能也没有像记事本那么弱,走的是中庸路线。

(2)TortoiseSVN
  每个做开发的人都应该自己搞一套版本管理系统,我的内部项目全都是用它管理的(不用装服务端,直接可以用它来建仓库)。自从用上了 SVN,已经彻底无法离开了。真无法想象从前人肉管理源代码的日子是怎么过来的。最早 TortoiseSVN 不带命令行工具,需要另外装一套工具,后来从某个版本开始自带了,所以只要装这一个就可以了。

(3)TortoiseGit
  这个是最近才开始用的版本管理工具外壳,它的操作方式与 TortoiseSVN 的差不多,上手很快。使用它前必须先装 Git for Windows 。Git 比 SVN 爽多了,GitHub 也是个很爽的网站,最喜欢里面的源代码统计功能,加了几行,删了几行,源码类型百分比统计,ZIP 打包下载等等。另外,建议使用英文版(包括 TortoiseSVN),一些词条换成中文就搞不清楚到底是哪个命令了。

(4)HaSHer
  这个是我自己写的工具,可以批量计算文件的哈希值,并且比较前后两次哈希值列表的差异(需要外部文本比较工具 TextDiff 和 TortoiseMerge)。我都是挂在右键菜单上用的。

(5)grepWin
  TortoiseSVN 作者做的一个文本查找替换的小工具,挂在右键菜单上可以很方便的查找替换源码(脱离编辑环境)。

(6)HashCalc
  一个计算哈希的免费工具。我主要用它来计算源代码里的字符串哈希值,同时用来对比自己代码计算哈希值的正确性,做个参考。

(7)Rapid Environment Editor
  一个非常好的环境变量配置工具,免费的。配置编译器路径和环境变量时很方便(Windows 自带的环境变量设置工具到了 Win7 还是那副德性,完全没有可用性,让人忍无可忍,难道是为了留口饭给别人吃?)。

(8)FreeFileSync
  免费开源的文件同步工具,用来备份文件很方便。我都是用它来把文件备份到移动硬盘里去的,使用镜像模式。

(9)010 Editor
  分析二进制文件的时候使用。虽然有不爽的地方,但是功能还算够用。在没有更好的选择之前用用还算不错。以后 QuestLAB 里会做一个类似的二进制观察分析工具,可以自己定制一些自己想要的功能。

(10)Foxit Reader
  看 DataSheet PDF 用的,比起又大又臭的那什么要小巧清爽多了,不过听说其安全漏洞很多。中文版貌似版本很老,一直没有更新,现在直接使用英文版。

(11)Greenfish Icon Editor
  一个免费的图标编辑工具。QuestLAB 里的图标都是用它编辑的(网上找来中意的图标,然后删除图标文件里的那些超大图标,并按大小排成一致的顺序)。

(12)Sysinternal Suite
  微软出的一组免费的实用工具。常用的有 AutoRuns(删注册表僵尸、自启动和垃圾驱动用)、Desktops(可实现多个桌面)、Junction(XP 下用来实现 NTFS 文件链接)、SigCheck(检查文件的数字签名,我是挂在右键菜单上用的)、Sync(刷磁盘写缓存用,强行断移动硬盘前执行几次)。

(13)WinDV
  一个德国人写的视频采集小程序。抓 DV 视频的时候文件名会以拍摄日期命名并分割文件,这个是会声会影做不到的。
 

posted @ 2013-03-24 22:25 CrHackOS 阅读(480) | 评论 (0)编辑 收藏

2012年9月2日

【基本信息】
将自己的想法付诸行动,那才是真正的有意思。

【更新列表】
 Release 2017-02-10
==============================
 Release 2016-11-02、Release 2016-02-25
==============================
 Release 2015-07-14Release 2015-03-23Release 2015-01-28Release 2015-01-13
==============================
 Release 2014-11-18、Release 2014-08-19Release 2014-07-10Release 2014-06-06Release 2014-05-30、Release 2014-05-14、Release 2014-04-29Release 2014-04-09Release 2014-03-23Release 2014-03-04、Release 2014-02-26、Release 2014-01-24Release 2014-01-03
==============================
 Release 2013-12-31Release 2013-12-03、Release 2013-11-26、Release 2013-11-05Release 2013-10-14Release 2013-09-29Release 2013-09-10、Release 2013-08-22、Release 2013-08-09Release 2013-07-09Release 2013-07-08Release 2013-06-01、Release 2013-05-09、Release 2013-04-22Release 2013-04-12Release 2013-04-07Release 2013-03-29、Release 2013-03-24、Release 2013-03-16Release 2013-03-07Release 2013-02-26

posted @ 2012-09-02 00:00 CrHackOS 阅读(726) | 评论 (2)编辑 收藏

2012年8月17日

  以前刚开始搞 GameViewer 的时候,主要目的是做一个自娱自乐的东西,用来打发打发时间。后期发现,当中有很多东西与平时的工作、兴趣爱好等等有很多的关联。所以后来,才逐渐加入了一些诸如 3D 模型、图片滤镜、脚本之类的功能。希望一些东西能够集成到那里去,有个可以测试和试验的统一环境。同时,那里面的东西也能够拿出来实际使用,不光光只是用来提取别人的东西,别无他用。
  之前用的是 C++Builder 6.0 做的界面,用 VC2003 写的一些库和插件。后来发现,这样的组合越来越偏离了本身的目标,局限性太大了,很多现成的资源无法利用,所以就果断停止了进一步的开发。而且,我想玩的东西还有很多,比如换用 QT 或者 WX 写写界面;用 OpenCV 做图形图像处理;加入 Lua、Python 等等来做脚本引擎;尝试一下那些开源的 3D 引擎;甚至想换用 .NET 和 Java 来做一点东西。一直以那样的组合为中心,实在是太无聊了,而且很难把所有不同的东西都拉到一起,或者说实现一个大统一的环境本来就是不可能的。
  为了实现目标,这次打算用《UNIX编程艺术》一书里提到的思想方法来重新设计。其根本手段就是:(1)应用与库分开。这就实现了一些东西集成到里面去,并且可以拿出来实际使用。打个比方就是,写完一个游戏插件,就可以拿这个库直接使用别人的资源来开发自己的游戏(所以本次设计的主要目标不是提取游戏资源,而是直接渲染游戏数据)。(2)多进程的架构。这就实现了多框架、多开发环境的问题。由于都是独立的程序,我想用什么来开发就用什么来开发,自由的很。(3)一个程序只做好一件事。这才是模块化的最高境界,给你一种豁然开朗的感觉。一个程序写烂了,可以直接扔,不会影响大局。(4)进程间通讯交互。这个才是最最重要的部分,一定要仔细设计交互协议,否则就是天下大乱。
  我把项目的源代码放到了这里 https://github.com/prefetchnta/questlab ,除了用到的第三方闭源开发库外,其他都是开放源代码的。目前还没有完全重现 GameViewer 的所有功能,但是整体框架已经有点成型了。以后会不定期更新,把以前做过的那些东西逐步开源出来。还要把其他零散的小工具、小程序统一集成到这个环境里来,形成一个大统一的应用程序。

posted @ 2012-08-17 17:10 CrHackOS 阅读(894) | 评论 (2)编辑 收藏

2012年7月7日

(1)想要成为一个超级大恶(贱)人,首先要明确,做大恶(贱)人的目的是什么。那就是,打击自己认为、以为或者圈定的对手(哪怕只是自己一厢情愿),给对方带来最大痛苦,实现自己龌龊的想法,进而满足自己变态的心理欲望或者贪婪的物质欲望(心理是绝大多数)。

(2)一定要从自己的亲人、亲戚、好友里寻找自己下手的目标。因为陌生人与你不熟,大多很快会把痛苦忘记掉。而自己的亲人、亲戚、好友会一直记在那里,从而把这种痛苦一直延续下去。而且,你自己也会产生一种所谓的族群里的心理优越感,把自己变态、龌龊的心理快感放大到最大。

(3)不能有内疚的心理。如果你把一个人给害惨了,你自己感到有点内疚,那证明,你离超级大恶(贱)人还有一段距离要走。当然也不能有真正的同情心。但是虚假的同情和关心是很有必要的,那样就像是在对方的伤口上撒盐一样,让对方更痛苦,自己更愉悦。

(4)要以老实、内向的人为下手目标。一来,比较好耍弄和陷害;二来,可以保证自己的安全。这一条也是第二条的补充:出于种种情面上的原因,你的亲人、亲戚、好友不会明的把你怎么样,最多也只是敬而远之。

(5)要从背后捅刀子。最好还是从对方周边的亲人中来寻找捅刀子的机会。可以一边收集情报,一边隔山打羊。借他们的手捅人那可是最佳。一旦事情败露,关系可以推得一干二净。自己逍遥快活,让别人痛苦去吧。最佳的寻找人选是对方的上一辈老人,因为那一辈人比较纯朴,也比较无知,比较容易相信你那有着不可告人目的的谎话。

(6)一旦真面目被戳穿、揭破,要马上披上道歉者、同情者、弥补者的外衣。当然,那些肯定都只是虚假的,没有实际行动的口头表示罢了。在那些外衣的保护和掩护下,你可以一次次地在对方的伤口上撒盐,而对方却拿你没有什么办法。

(7)在对方的正面,要以最丑恶、最装逼的面目出现。比如,自己的收入比别人哪怕只高一元钱,也要说一个人的收入决定一个人的能力;又比如,自己比别人哪怕只早工作一个月,工作内容也只有一点点相关,也要做出一副老前辈、老资格的样子,对别人指指点点、谆谆教诲。因为你是超级大恶(贱)人,你的存在就是为了让你的目标恶心、反胃与痛苦。

(8)强怕狠,狠怕没天良。在这片没有更无耻,只有更下贱的土地上,正迎来了一个超级大恶(贱)人辈出的伟大时代。往往越是无耻的人,活的越滋润。正所谓好人难做,而恶人却谋世界。等你丧尽天良,人性泯灭的时候,一个顶级的超级大恶(贱)人就这样诞生了。

(9)郑重声明:人在做,天在看。告诫学习了此手册,并打算付诸于行动的同学,悬崖勒马,回头是岸。要知道,善恶终有报,不是不报,时辰未到。一旦有任何不良后果,与本手册的作者无关。

posted @ 2012-07-07 08:53 CrHackOS 阅读(246) | 评论 (0)编辑 收藏

2012年5月20日

  昨天升级了最新的 Keil MDK 4.53,怕它老是提示 J-Link 要升级,就去 SEGGER 的网站下了个最新版的 J-Link 软件包(4.46F 版的),装好后运行 J-Link Commander 提示要升级固件。以前一直是刷的,没有问题,这次竟然升级后连不上仿真器了。提示 "Communication timed out: Requested 1 bytes, received 0 bytes !"。SEGGER 终于开始玩花招了。到 Keil 里打开了以前的一个工程,发现竟然还能调试,一看那 DLL 的版本是 4.40C 的,看来是在 DLL 里做了些手脚。
  今天用 IDA 跟了一下 J-Link Commander,并对比了一下两个动态库的差别,发现新版的在打开 J-Link 函数的过程里多了两个调用。前一个判断了一下仿真器的功能字符串里是否有 GDBFull,有就会多一步 USB 通讯,超时的就是这一步操作;后一个通过序列号枪毙了一些老的(被偷的?)J-Link。看了一下 GDBFull 这个字符串,只在这里用了一次,将其全部改为大写,发现可以连上了。另外,序列号为 11111117 和 805306163 的会强制校验 GDBFull 功能。
  大致上猜了一下,可能是 SEGGER 更新了一下 GDBFull 功能与序列号的绑定算法,下面的固件里也应该改过了,那一步 USB 通讯就是下面返回上来的认证结果,所以接收的只有一个字节。GDBFull 这个功能貌似从来没有用过,反正我没有用到过。
  节约空间资源,删掉了下载。具体改法就是找到那个字符串,改成别的就行了。

posted @ 2012-05-20 18:32 CrHackOS 阅读(9796) | 评论 (19)编辑 收藏

仅列出标题  下一页