无忧启动论坛

标题: 请教:能否能用批处理实现编码的转换。【已解决】 [打印本页]

作者: lianjiang    时间: 2007-6-3 07:17
标题: 请教:能否能用批处理实现编码的转换。【已解决】
请教:能否能用批处理实现编码的转换。
我想自动实现把类似下面的16位制字符转换成字符,并赋予变量。能不能实现?需第三方软件也可,但要能支持行命令。

00000004E00: 45 30 38 33 39 32 42 42 38 39 44 45 44 42 38 45
00000004E10: 44 36 46 42 32 39 38 46 38 45 37 32 39 43 31 35
(结果应是E08392BB89DEDB8ED6FB298F8E729C15)
-----------------------------------------------------------------------------------
我把整个问题的思路汇报一下,便于各位出手。呵呵。

这个问题的起源,是前两天的一个关于文件保护的帖子中的一部分。不过这里不再考虑其它方法,仅就16进制转普通的字符进行讨论。

注意:所有操作通过批处理实现。

1,输入设定密码。
2,把密码字符转换成MD5,(32个字符,即形如E08392BB89DEDB8ED6FB298F8E729C15)。
3,用第三方工具写入某一空扇区,保存此密码。
4,验证时,读取该扇区到文本文件,形如
00000004E00: 45 30 38 33 39 32 42 42 38 39 44 45 44 42 38 45
00000004E10: 44 36 46 42 32 39 38 46 38 45 37 32 39 43 31 35
5,把前两行16进制的字符,转成普通的32个字符。
6,输入验证密码,转成MD5。
7,两者比较。完成。

[ 本帖最后由 lianjiang 于 2007-6-3 02:47 PM 编辑 ]
作者: netwinxp    时间: 2007-6-3 10:25
你上面的本身就是ASCII码,需要转换吗?:em32
作者: lianjiang    时间: 2007-6-3 11:09
需要装换成“E08392BB89DEDB8ED6FB298F8E729C15”
作者: q8q8feng    时间: 2007-6-3 11:22
原帖由 netwinxp 于 2007-6-3 10:25 AM 发表
你上面的本身就是ASCII码,需要转换吗?:em32

上面的是带有行标识的十六进制数,下面的才是标准的ASCII码。
要支持命令行,我也帮楼主关注下
作者: lianjiang    时间: 2007-6-3 11:31
我是想把文本文件里的16进制字符,转成普通ASCII字符。

不转成文本,我也无法贴上来呀,呵呵。
作者: netwinxp    时间: 2007-6-3 11:35
把上面的那段16进制直接存成TXT文件就可以了
作者: netwinxp    时间: 2007-6-3 11:37
原帖由 q8q8feng 于 2007-6-3 11:22 发表

上面的是带有行标识的十六进制数,下面的才是标准的ASCII码。
要支持命令行,我也帮楼主关注下

下面的是字符串,上面的才是ASCII码,英文、数字等字符在计算机中是以ASCII来表示的,也就是说下面的那段,在内存中也是按上面那段的方式存在的。下面那段要是ASCII那就成了乱码了:em32

[ 本帖最后由 netwinxp 于 2007-6-3 11:39 AM 编辑 ]
作者: qzwqzw    时间: 2007-6-3 11:40
问题倒是不大

先过滤掉样本中的地址段字节

再格式化成命令行程序的输入格式

使用一个hex2bin的程序

或者使用自带的debug都没有问题

-----------------------------------------------

问题是,从样本来看

极有可能是从16进制查看程序中得到的

通常它们都应该会有H2B的转换捷径

现在的方法应该是绕路了

不妨将原本的意图说出来

看看有没有什么更简单的办法
作者: 弄潮儿-NET    时间: 2007-6-3 11:43
奇怪,为何会有4E00这种鬼冬冬……
作者: lianjiang    时间: 2007-6-3 11:53
好的,我把整个问题的思路汇报一下,便于各位出手。呵呵。

这个问题的起源,是前两天的一个关于文件保护的帖子中的一部分。不过这里不再考虑其它方法,仅就16进制转普通的字符进行讨论。

注意:所有操作通过批处理实现。

1,输入设定密码。
2,把密码字符转换成MD5,(32个字符,即形如E08392BB89DEDB8ED6FB298F8E729C15)。
3,用第三方工具写入某一空扇区,保存此密码。
4,验证时,读取该扇区到文本文件,形如
00000004E00: 45 30 38 33 39 32 42 42 38 39 44 45 44 42 38 45
00000004E10: 44 36 46 42 32 39 38 46 38 45 37 32 39 43 31 35
5,把前两行16进制的字符,转成普通的32个字符。
6,输入验证密码,转成MD5。
7,两者比较。完成。
作者: qzwqzw    时间: 2007-6-3 12:11
果然绕了一些弯路

----------------------------------------------------------

首先这个第三方工具用的并不够好

既然可以将文本串写入

就应该可以直接读出文本串

除非这个工具本身不够好

------------------------------------------------------------

debug也完全可以实现指定扇区的读写

只是c/h/s这些参数需要自己计算

-----------------------------------------------------

应该注意到md5码它本身就是十六进制数

可以直接写入二进制数到扇区

而并非是将编码后的文本串写入到扇区

这样要安全和简单一些
--------------------------------------------------------

要比较的时候

也可以不用将原位置的码提取出来

可以再在原码更靠后的地址上写入验证码

然后用Debug的c命令进行比较

-----------------------------------------------------------------

说这些的目的

主要是为了避免一些预处理的工作

这在dos下很麻烦

在cmd下虽然简单,但容易出问题
---------------------------------------------------

最后,请指出你的运行环境
作者: qzwqzw    时间: 2007-6-3 12:19
想要省事一些的话

这里的东西可能对你有用

http://www.cn-dos.net/forum/viewthread.php?tid=21955
作者: lianjiang    时间: 2007-6-3 12:20
谢谢楼上的高手。
本人计算机基础和水平都差,还请包涵,呵呵。
我现在的思路是根据手上已有的软件,进行组合后提出的。有更简便的办法,当然更好。
写入和读取扇区是用的diskrw。
使用环境是win 2k/xp/vista。目前不需要dos下的。当然,假如部分操作只能在dos下完成的话,也可以考虑。
作者: lianjiang    时间: 2007-6-3 12:22
原帖由 qzwqzw 于 2007-6-3 12:19 PM 发表
想要省事一些的话

这里的东西可能对你有用

http://www.cn-dos.net/forum/viewthread.php?tid=21955

谢谢,我去看看。
作者: lianjiang    时间: 2007-6-3 12:28
要比较的时候

也可以不用将原位置的码提取出来

可以再在原码更靠后的地址上写入验证码

然后用Debug的c命令进行比较
-------------------------------------------------
谢谢,此法很好,呵呵,我怎么没想到。
我只想到读出来再比较。(现在把密码保存在文本中,就是这样进行的。)
确实把验证码再写入一个扇区,直接比较两个扇区就行了。我现在用的diskrw就有此功能。
这样的话,也就无需考虑转换了,直接就完成了。
再次感谢。
作者: 弄潮儿-NET    时间: 2007-6-3 12:45
晕哦,楼上出的是什么软件?千万别让偶用到,不然我的硬盘都被你搞乱了……
作者: lianjiang    时间: 2007-6-3 12:47
原帖由 qzwqzw 于 2007-6-3 12:11 PM 发表
首先这个第三方工具用的并不够好
既然可以将文本串写入
就应该可以直接读出文本串
除非这个工具本身不够好
- ...

把32个字符写入扇区的方法原来我也不会,只会写入512字节的bin文件到扇区,是c男的办法才解决了把字符写入扇区的。
方法是把32个字符写入文件,然后补上512-32个字符,这样是一个扇区大小了,所以就能写入扇区了。
直接读取字符的方法不会。呵呵。

这个主要不是工具的问题,是自己没用好。呵呵。
作者: lianjiang    时间: 2007-6-3 12:49
原帖由 弄潮儿-NET 于 2007-6-3 12:45 PM 发表
晕哦,楼上出的是什么软件?千万别让偶用到,不然我的硬盘都被你搞乱了……

呵呵,还没用呢。
将来就是要用,不是全为0的扇区,也不会写入的。
作者: q8q8feng    时间: 2007-6-3 12:55
太好了 很有意义:)
作者: lianjiang    时间: 2007-6-3 13:02
考虑了一下,写入另一扇区的话,就需要用两个扇区。
似乎也可这样:
备份写入了设置密码的扇区到文件,把验证密码文件写入该扇区,比较扇区与备份文件。
这样的话,只要一个扇区就行了。
缺点是增加了写入次数。
作者: q8q8feng    时间: 2007-6-3 14:04
原帖由 lianjiang 于 2007-6-3 01:02 PM 发表
考虑了一下,写入另一扇区的话,就需要用两个扇区。
似乎也可这样:
备份写入了设置密码的扇区到文件,把验证密码文件写入该扇区,比较扇区与备份文件。
这样的话,只要一个扇区就行了。
缺点是增加了写入次数。

增加写入总感觉不太爽快。
我试了下qzwqzw 提到的帖子中一楼中的工具,txt2bin.exe:
把你一楼的
00000004E00: 45 30 38 33 39 32 42 42 38 39 44 45 44 42 38 45
00000004E10: 44 36 46 42 32 39 38 46 38 45 37 32 39 43 31 35
直接改动一下,去掉多余的空格和行标识,即为:
--------------------------------------------------------------------------------------------
4530383339324242383944454442384544364642323938463845373239433135,直接写入txt,名为1.txt
然后使用txt2bin.exe,转换的bin文件(1.bin)内容即为所需的32个字符:
E08392BB89DEDB8ED6FB298F8E729C15
--------------------------------------------------------------------------------------------
后面的就简单了,将这个bin写入空闲扇区,使用diskrw是很简单的事情,批处理很容实现这些的,比如我们要写入第20扇区:

[ 本帖最后由 q8q8feng 于 2007-6-3 02:09 PM 编辑 ]
作者: lianjiang    时间: 2007-6-3 14:54
感谢各位的解答,此问题已得到圆满解决。
作者: netwinxp    时间: 2007-6-3 15:18
提个建议,为了防止密码被非法读取,原来的密码最好经过MD5转换后,再写进去,后面输入的口令经MD5转换后与原来写进去的进行比较,相同则密码正确,反之错误,至于MD5转换的方法可以参照ASPSKY论坛源代码或通过软件完成。
作者: lianjiang    时间: 2007-6-3 16:11
原帖由 netwinxp 于 2007-6-3 03:18 PM 发表
提个建议,为了防止密码被非法读取,原来的密码最好经过MD5转换后,再写进去,后面输入的口令经MD5转换后与原来写进去的进行比较,相同则密码正确,反之错误,至于MD5转换的方法可以参照ASPSKY论坛源代码或通过 ...


谢谢。
是的,原有思路就是经过MD5转换的。1楼。
-----------------------------------------------------
1,输入设定密码。
2,把密码字符转换成MD5,(32个字符,即形如E08392BB89DEDB8ED6FB298F8E729C15)。
3,用第三方工具写入某一空扇区,保存此密码。
4,验证时,读取该扇区到文本文件,形如
00000004E00: 45 30 38 33 39 32 42 42 38 39 44 45 44 42 38 45
00000004E10: 44 36 46 42 32 39 38 46 38 45 37 32 39 43 31 35
5,把前两行16进制的字符,转成普通的32个字符。
6,输入验证密码,转成MD5。
7,两者比较。完成。
==================
现变成
1,输入设定密码。
2,把密码字符转换成MD5,(32个字符,即形如E08392BB89DEDB8ED6FB298F8E729C15)。
3,用第三方工具写入某一空扇区,保存此密码。
4,验证时,读取该扇区。
5,输入验证密码,转成MD5。
6,两者比较。完成。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3