我正在做的是尝试构建一个可以在自定义安卓恢复中刷新的脚本,如TWRP或ClockWorkMod。
开头:所以在ADB shell提示符下使用此命令将修改许多HTC设备上引导加载程序的锁定或解锁标志所在的分区 -
echo -ne '\x00\x00\x00\x00' | dd of=/dev/block/mmcblk0p3 bs=1 seek=33796
我试图能够从恢复中做同样的事情(Aroma脚本,但不应该重要)
问题在于,虽然CWM恢复可以使用这两条简单的线来完成它:
echo -ne "\000\000\000\000" > /tmp/data_new
dd if=/tmp/data_new of=/dev/block/mmcblk0p3 bs=1 seek=33796 conv=notrunc
TWRP环境不能。问题似乎与回声中的引号和/或反斜杠有关。
为了解决这个问题,我试图用echo的输出(只有4个字节)打包一个名为data_new的文件,然后使用DD命令,但它没有正确读取data_new,因为我得到了0 +0记录输入和0 + 0记录输出。我也尝试编写一个shell脚本来执行命令,但在TWRP中也是一样的问题。
为了增加一层复杂性,香水脚本中的命令引用如下: run_program(“/ sbin / busybox”,“dd”,“if = / tmp / data_new”,“of = / dev / block / mmcblk0p3”等
我尝试了很多单引号和双引号组合以及领先的反引号,但仍然失败。
底线 - 是否有不同的方式表达4个归零的十六进制值?
反向不是问题,因为它对Lock的回声是这样的:(没有反引号和HTCU上的引号不起作用,因为回声输出是否相同)或
echo -ne "HTCU" | dd of=/dev/block/mmcblk0p3 bs=1 seek=33796
问题在于获取DD命令以在不使用回声中的反引号的情况下将HTCU值更改为4个零。
有人可以帮忙吗?
PS - 我认为这可以通过将DD分区拉到/ tmp然后找到HTCU字符串(48 54 43 55)并替换为00 00 00 00来完成,但是分区很大而只有一个小的实际上它的数据量,所以这个过程需要一段时间,而且脚本会比我想的更复杂,因为我是编码的菜鸟。 感谢
编辑:我尝试使用/ dev / null,因为这似乎是个好主意,也是一种完全避免回声的方法。然而,这也失败了。与使用预加载的4个nul字节文件的结果相同。我知道这不是恢复,因为/ dev / null方法在ADB shell中产生了相同的故障。0+0 records in
0+0 records out
0 bytes copied
以下是完整的代码字符串:
run_program("/sbin/busybox", "dd", "if=/dev/null", "of=/dev/block/mmcblk0p3", "bs=1", "count=4", "seek=33796", "conv=notrunc")
在dd之后,可能是进行快速十六进制编辑的最佳替代方法? 这是我的要求: 在偏移量0x8404写入分离mmcblk0p3。 HTCU用于解锁,HTCL用于重新锁定或0x00000000用于锁定 再次感谢
答案 0 :(得分:0)
您是否可以直接从/dev/null
读取4个字节;我相信语法是:
dd if=/dev/null of=/dev/block/mmcblk0p3 bs=1 count=4 seek=33796 conv=notrunc
请仔细检查上面的代码,我暂时没有使用dd
。
在使用dd后,我设法让它将4个空字节写入我在文件中指定的位置:
首先创建示例文件:
$ dd if=/dev/urandom of=randomfile bs=64 count=1
1+0 records in
1+0 records out
64 bytes (64 B) copied, 4.5401e-05 s, 1.4 MB/s
$ od -b randomfile
0000000 105 342 131 116 213 371 352 344 217 236 320 106 010 154 074 375
0000020 360 215 014 203 030 357 144 053 302 265 012 310 217 362 236 303
0000040 156 033 266 035 303 061 262 055 253 102 222 037 372 105 230 321
0000060 117 277 322 277 166 174 316 176 010 202 302 151 120 045 120 334
0000100
然后将4个字节归零,跳过前两个字节:
$ dd if=/dev/zero of=randomfile seek=2 bs=1 count=4 conv=notrunc
4+0 records in
4+0 records out
4 bytes (4 B) copied, 4.4779e-05 s, 89.3 kB/s
$ od -b randomfile
0000000 105 342 000 000 000 000 352 344 217 236 320 106 010 154 074 375
0000020 360 215 014 203 030 357 144 053 302 265 012 310 217 362 236 303
0000040 156 033 266 035 303 061 262 055 253 102 222 037 372 105 230 321
0000060 117 277 322 277 166 174 316 176 010 202 302 151 120 045 120 334
0000100
这应该扩展到更大的文件。