parent
b0aadf9bbf
commit
36802e23cf
@ -0,0 +1,11 @@ |
||||
define Build/Compile |
||||
$(call Build/Compile/Default)
|
||||
$(TARGET_CC) -o $(PKG_BUILD_DIR)/adam2patcher $(PLATFORM_DIR)/src/adam2patcher.c
|
||||
endef |
||||
|
||||
define Package/base-files/install-target |
||||
mkdir -p $(1)/sbin
|
||||
$(CP) $(PKG_BUILD_DIR)/adam2patcher $(1)/sbin
|
||||
endef |
||||
|
||||
|
@ -0,0 +1,13 @@ |
||||
#!/bin/sh /etc/rc.common |
||||
# ADAM2 patcher for Netgear DG834 and compatible |
||||
# Copyright (C) 2006 OpenWrt.org |
||||
|
||||
START=00 |
||||
start() { |
||||
MD5="$(md5sum /dev/mtdblock/0 | awk '{print $1}')" |
||||
[ "$MD5" = "0530bfdf00ec155f4182afd70da028c1" ] && { |
||||
mtd unlock adam2 |
||||
/sbin/adam2patcher /dev/mtdblock/0 |
||||
} |
||||
rm -f /etc/init.d/S00adam2 /sbin/adam2patcher >&- 2>&- |
||||
} |
@ -0,0 +1,59 @@ |
||||
/*
|
||||
* patcher.c - ADAM2 patcher for Netgear DG834 (and compatible) |
||||
* |
||||
* Copyright (C) 2006 Felix Fietkau |
||||
* |
||||
* This program is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU General Public License |
||||
* as published by the Free Software Foundation; either version 2 |
||||
* of the License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
*/ |
||||
|
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <stddef.h> |
||||
#include <unistd.h> |
||||
#include <fcntl.h> |
||||
#include <stdint.h> |
||||
#include <sys/mman.h> |
||||
#include <sys/stat.h> |
||||
#include <string.h> |
||||
|
||||
#include <sys/ioctl.h> |
||||
|
||||
int main(int argc, char **argv) |
||||
{ |
||||
int fd; |
||||
char *ptr; |
||||
uint32_t *i; |
||||
|
||||
if (argc != 2) { |
||||
fprintf(stderr, "Usage: %s <filename>\n", argv[0]); |
||||
exit(1); |
||||
} |
||||
|
||||
if (((fd = open(argv[1], O_RDWR)) < 0) |
||||
|| ((ptr = mmap(0, 128 * 1024, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)) == (void *) (-1))) { |
||||
fprintf(stderr, "Can't open file\n"); |
||||
exit(1); |
||||
} |
||||
|
||||
i = (uint32_t *) &ptr[0x3944]; |
||||
if (*i == 0x0c000944) { |
||||
fprintf(stderr, "Unpatched ADAM2 detected. Patching... "); |
||||
*i = 0x00000000; |
||||
msync(i, sizeof(*i), MS_SYNC|MS_INVALIDATE); |
||||
fprintf(stderr, "done!\n"); |
||||
} else if (*i == 0x00000000) { |
||||
fprintf(stderr, "Patched ADAM2 detected.\n"); |
||||
} else { |
||||
fprintf(stderr, "Unknown ADAM2 detected. Can't patch!\n"); |
||||
} |
||||
|
||||
close(fd);
|
||||
} |
Loading…
Reference in new issue