1

我正在做的是尝试构建一个可以在 TWRP 或 ClockWorkMod 等自定义 android 恢复中闪烁的脚本。

开始:因此,在 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 个 nul 字节)打包一个名为 data_new 的文件,然后使用 DD 命令,但它没有正确读取 data_new,因为我得到 0+0 条记录输入和 0+0 记录输出。我也尝试过编写一个 shell 脚本来执行命令,但在 TWRP 中存在同样的问题。

为了增加一层复杂性,芳香脚本中的命令引用如下:run_program("/sbin/busybox", "dd", "if=/tmp/data_new", "of=/dev/block/mmcblk0p3" etc

我尝试了许多单引号和双引号以及前导反引号的组合,但仍然失败。

底线 -是否有不同的方式来表达 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 用于锁定 再次感谢

4

1 回答 1

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

这应该扩展到您的较大文件。

于 2013-11-07T07:11:49.703 回答