From 6ff55cefd060b4c8f6c0fa97d5521516f9ee43f1 Mon Sep 17 00:00:00 2001 From: a3955269 Date: Tue, 8 Jan 2013 16:14:56 +0000 Subject: Add Samsung TouchWiz decryption Change-Id: I418680e59372160dabfe3e2d5f0208229aa151ae --- crypto/cryptfs/Android.mk | 53 +++++++++++++++++++++++++++++++++ crypto/cryptfs/cryptfs.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 crypto/cryptfs/Android.mk create mode 100644 crypto/cryptfs/cryptfs.c (limited to 'crypto/cryptfs') diff --git a/crypto/cryptfs/Android.mk b/crypto/cryptfs/Android.mk new file mode 100644 index 000000000..3267c931d --- /dev/null +++ b/crypto/cryptfs/Android.mk @@ -0,0 +1,53 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES:= \ + cryptfs.c + +LOCAL_CFLAGS:= -g -c -W -I../fs_mgr/include +LOCAL_CFLAGS += -DTW_INCLUDE_CRYPTO +LOCAL_CFLAGS += -DCRYPTO_FS_TYPE=\"$(TW_CRYPTO_FS_TYPE)\" +LOCAL_CFLAGS += -DCRYPTO_REAL_BLKDEV=\"$(TW_CRYPTO_REAL_BLKDEV)\" +LOCAL_CFLAGS += -DCRYPTO_MNT_POINT=\"$(TW_CRYPTO_MNT_POINT)\" +LOCAL_CFLAGS += -DCRYPTO_FS_OPTIONS=\"$(TW_CRYPTO_FS_OPTIONS)\" +LOCAL_CFLAGS += -DCRYPTO_FS_FLAGS=\"$(TW_CRYPTO_FS_FLAGS)\" +LOCAL_CFLAGS += -DCRYPTO_KEY_LOC=\"$(TW_CRYPTO_KEY_LOC)\" +ifdef TW_CRYPTO_SD_REAL_BLKDEV + LOCAL_CFLAGS += -DCRYPTO_SD_REAL_BLKDEV=\"$(TW_CRYPTO_SD_REAL_BLKDEV)\" + LOCAL_CFLAGS += -DCRYPTO_SD_FS_TYPE=\"$(TW_CRYPTO_SD_FS_TYPE)\" +endif +ifneq ($(TW_INTERNAL_STORAGE_PATH),) + LOCAL_CFLAGS += -DTW_INTERNAL_STORAGE_PATH=$(TW_INTERNAL_STORAGE_PATH) +endif +ifneq ($(TW_INTERNAL_STORAGE_MOUNT_POINT),) + LOCAL_CFLAGS += -DTW_INTERNAL_STORAGE_MOUNT_POINT=$(TW_INTERNAL_STORAGE_MOUNT_POINT) +endif +ifneq ($(TW_EXTERNAL_STORAGE_PATH),) + LOCAL_CFLAGS += -DTW_EXTERNAL_STORAGE_PATH=$(TW_EXTERNAL_STORAGE_PATH) +endif +ifneq ($(TW_EXTERNAL_STORAGE_MOUNT_POINT),) + LOCAL_CFLAGS += -DTW_EXTERNAL_STORAGE_MOUNT_POINT=$(TW_EXTERNAL_STORAGE_MOUNT_POINT) +endif + +LOCAL_C_INCLUDES += system/extras/ext4_utils external/openssl/include +LOCAL_MODULE:=cryptfs +LOCAL_MODULE_TAGS:= eng +LOCAL_SHARED_LIBRARIES += libc libcutils +LOCAL_SHARED_LIBRARIES += libcrypto + + +#LOCAL_LDFLAGS += -L$(TARGET_OUT_SHARED_LIBRARIES) -lsec_km -lsec_ecryptfs -ldl +LOCAL_LDFLAGS += -ldl + +LOCAL_STATIC_LIBRARIES += libmtdutils +LOCAL_STATIC_LIBRARIES += libminadbd libminzip libunz +LOCAL_STATIC_LIBRARIES += libminuitwrp libpixelflinger_static libpng libjpegtwrp libgui +LOCAL_SHARED_LIBRARIES += libz libc libstlport libcutils libstdc++ libmincrypt libext4_utils +LOCAL_STATIC_LIBRARIES += libcrypt_samsung + + +LOCAL_STATIC_LIBRARIES += $(TARGET_RECOVERY_UI_LIB) +#LOCAL_STATIC_LIBRARIES += libfs_mgrtwrp +LOCAL_MODULE_CLASS := UTILITY_EXECUTABLES +LOCAL_MODULE_PATH := $(PRODUCT_OUT)/utilities +include $(BUILD_EXECUTABLE) diff --git a/crypto/cryptfs/cryptfs.c b/crypto/cryptfs/cryptfs.c new file mode 100644 index 000000000..59e7added --- /dev/null +++ b/crypto/cryptfs/cryptfs.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2013 a3955269 all rights reversed, no rights reserved. + */ + +#define TW_INCLUDE_CRYPTO_SAMSUNG +#include "../ics/cryptfs.c" + +int dm_remove_device(const char *name) +{ + int r; + r = delete_crypto_blk_dev(name); + if(!r) + printf("crypto block device '%s' deleted.\n", name); + else + printf("deleting crypto block device '%s' failed. [%d - %s]\n", name, r, strerror(errno)); + return r; +} + +int ecryptfs_test(const char *pw) +{ + char pwbuf[256]; + int r; + + strcpy(pwbuf, pw); + // 0: building options without file encryption filtering. + // 1: building options with media files filtering. + // 2: building options with all new files filtering. + r = mount_ecryptfs_drive(pwbuf, "/emmc", "/emmc", 0); + printf("mount_ecryptfs_drive: %d\n", r); + r = mount("/dev/block/mmcblk1", "/emmc", "vfat", MS_RDONLY, ""); + printf("mount: %d\n", r); + + r = umount("/emmc");///dev/block/mmcblk1"); + printf("umount: %d\n", r); + + //r = unmount_ecryptfs_drive("/emmc"); + //printf("unmount_ecryptfs_drive: %d\n", r); + + return r; +} + +int main(int argc, char* argv[]) +{ + if(argc < 2) + { + printf("no args!\n"); + return 1; + } + + property_set("ro.crypto.state", "encrypted"); + + property_set("ro.crypto.fs_type", CRYPTO_FS_TYPE); + property_set("ro.crypto.fs_real_blkdev", CRYPTO_REAL_BLKDEV); + property_set("ro.crypto.fs_mnt_point", CRYPTO_MNT_POINT); + property_set("ro.crypto.fs_options", CRYPTO_FS_OPTIONS); + property_set("ro.crypto.fs_flags", CRYPTO_FS_FLAGS); + property_set("ro.crypto.keyfile.userdata", CRYPTO_KEY_LOC); + +#ifdef CRYPTO_SD_FS_TYPE + property_set("ro.crypto.sd_fs_type", CRYPTO_SD_FS_TYPE); + property_set("ro.crypto.sd_fs_real_blkdev", CRYPTO_SD_REAL_BLKDEV); + property_set("ro.crypto.sd_fs_mnt_point", EXPAND(TW_INTERNAL_STORAGE_PATH)); +#endif + + property_set("rw.km_fips_status", "ready"); + + delete_crypto_blk_dev("userdata"); + delete_crypto_blk_dev("sdcard"); + delete_crypto_blk_dev("emmc"); + + cryptfs_check_passwd(argv[1]); + + return 0; +}; -- cgit v1.2.3