টি এল; ডিআর: পোর্টেবল, বিকাশকারী-ভিত্তিক মূল প্রক্রিয়া, যা সমস্ত অ্যান্ড্রয়েড মেশিন জুড়ে কাজ করে, এটি চূড়ান্ত পদক্ষেপ সম্পর্কে একটি প্রশ্ন। এটি কোনও শোষণের ভিত্তিতে নয় - এটি এমন একটি বিষয় যা আমরা আমাদের নিজস্ব মেশিনে বিকাশকারী হিসাবে আইনত ও নৈতিকভাবে অনুমতিপ্রাপ্ত। যদি আমি কোনও উত্তর পাই এবং আমার ডেবিয়ানের অভ্যন্তরে ঘাঁটাঘাঁটি করতে পরিচালনা করি, তবে আমি তাদের সমস্ত ট্যাবলেটগুলিতে রুট অ্যাক্সেস চায় এমন সমস্ত সহযোগী বিকাশকারীদের জন্য এই প্রক্রিয়াটির সমস্ত পদক্ষেপের বিশদ একটি সংক্ষিপ্ত ব্লগ পোস্ট করব - এবং সন্দেহজনক-উত্সকে বিশ্বাস করতে চাই না "এক-ক্লিক-শিকড়" যা তাদের মেশিনগুলিতে (বোটনেট সদস্য?) কী Godশ্বরকে জানে - কেবলমাত্র নির্ভরতাগুলি মেশিনের কার্নেল উত্সগুলি (যা নির্মাতাকে আইনত বাধ্যতামূলকভাবে বাধ্যতামূলক করা হবে) এবং বুট পার্টিশন চিত্র (boot.img
) যা নির্মাতারা প্রদত্ত ওভার-দ্য এয়ার আপডেটের অভ্যন্তরে 99% সময় বা স্বতন্ত্রভাবে ফ্ল্যাশ-সক্ষম চিত্র হিসাবে স্বতন্ত্রভাবে ডাউনলোডযোগ্য inside
সুতরাং, এক সপ্তাহ কেটে গেল যেখানে আমি আমার ফ্রি সময়টি আমার নতুন অ্যান্ড্রয়েড ট্যাবলেটে কাটিয়েছি।
এবং আমার অ্যান্ড্রয়েড 5.0.2 ট্যাবলেটে রুট অর্জনের জন্য, একটি পোর্টেবল, বিকাশমুখী প্রক্রিয়া তৈরি করতে - আমি প্রায় সম্পূর্ণ সফল হয়েছি।
তবে এখনও একটি জিনিস অনুপস্থিত - আমি একটি ক্রুট করতে পারি না (যা আমার debootstrap
বয়সের দেবিয়ান চালাতে হবে !)
এতক্ষণ যা করেছি
- প্রথমে, আমি আমার ট্যাবলেটটির (প্রস্তুতকারক সরবরাহিত) কার্নেল উত্সগুলিতে একটি ছোটখাটো প্যাচ করেছি এবং তারপরে আমার নিজের কার্নেলটি সংকলিত করেছি - যেখানে আমি সেলিনাক্স এনফোর্সিং মোড পরিবর্তন করার জন্য চেকগুলি অক্ষম করেছিলাম । বিশেষ করে ...
ইন security/selinux/selinuxfs.c
:
...
if (new_value != selinux_enforcing) {
/* Commented out by ttsiodras.
length = task_has_security(current, SECURITY__SETENFORCE);
if (length)
goto out;
*/
audit_log(current->audit_context, GFP_KERNEL, AUDIT_MAC_STATUS,
"enforcing=%d old_enforcing=%d auid=%u ses=%u",
new_value, selinux_enforcing,
আমি তখন আমার আরআরডি চিত্রটি
/default.prop
ধারণ করে পরিবর্তন করেছি :ro.secure=0
এবংro.debuggable=1
যেহেতু আমার নির্মাতার
initrd.img
এটা অনুপস্থিত ছিল আমিও কম্পাইলsu.c
থেকে https://android.googlesource.com/platform/system/extras/+/master/su/ এবং তার ফলে বাইনারি অধীনে স্থাপন/sbin/su
করে, নিশ্চিত করুন যে এটি এর SUID রুট সেট করা হয় (chmod 04755 /sbin/su
) ।
এর পরে, আমি আমার পূর্ববর্তী পোস্টের ২ য় পর্বে যেমনটি ব্যাখ্যা করেছি - এবং আমার নিজের ইমেজটি থেকে বুট করা হয়েছে আমি নতুন কার্নেল এবং নতুন আরআরডি প্যাকেজ করেছি:
adb reboot boot-loader ; fastboot boot myboot.img
তাহলে, আপনি কি মূল?
হ্যাঁ, এটি প্রথমদিকে সফল বলে মনে হয়েছিল:
$ adb shell
shell@K01E_2:/ $ id
uid=2000(shell) gid=2000(shell) groups=1004(input),1007(log),1011(adb),
1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),
3003(inet),3006(net_bw_stats)
context=u:r:shell:s0
shell@K01E_2:/ $ ls -l /sbin/su /sbin/_su
-rwxr-xr-x root root 131 2015-10-03 10:44 su
-rwsr-xr-x root root 9420 2015-10-03 01:31 _su
(the _su is the binary I compiled, set to SUID root, and "su" is
a script I wrote to tell "su" to add me to all these groups...)
shell@K01E_2:/ $ cat /sbin/su
#!/system/bin/sh
export PATH=/system/bin:$PATH
exec /sbin/_su 0,0,1000,1028,2000,2001,1004,1007,1011,1015,\
1028,3001,3002,3003,3006
এবং আমি এখন মূল অর্জন করেছি:
shell@K01E_2:/ $ su
root@K01E_2:/ # id
uid=0(root) gid=0(root)
groups=1000(system),1004(input),1007(log),1011(adb),
1015(sdcard_rw),1028(sdcard_r),1028(sdcard_r),2000(shell),2001(cache),
3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats)
context=u:r:shell:s0
আমি 100% নিশ্চিত যে আমি রুট - কেবল তাই id
বলে তা নয়, কারণ আমি এমন কিছু করতে পারি যা স্বাভাবিক প্রক্রিয়াগুলি অবশ্যই করতে পারে না:
root@K01E_2:/ # ls -l /dev/block/platform/msm_sdcc.1/by-name/boot
lrwxrwxrwx root root 2015-10-03 10:47 boot -> /dev/block/mmcblk0p16
root@K01E_2:/ # dd if=/dev/block/mmcblk0p16 of=/dev/null bs=1M
16+0 records in
16+0 records out
16777216 bytes transferred in 0.569 secs (29485441 bytes/sec)
দেখুন এবং দেখুন - আমি শেষ পর্যন্ত আমার ট্যাবলেট থেকে কাঁচা পার্টিশনগুলি পড়তে পারি!
এবং সেলিনাক্স সত্যই "ডাউন, কুকুর" মোডে রয়েছে:
root@K01E_2:/ # getenforce
Permissive
তবে ... এখনও কিছু জিনিস আছে যা আমি করতে পারি না:
root@K01E_2:/ # mkdir /my_mnt
root@K01E_2:/ # mount -t ext4 /dev/block/mmcblk1p2 /my_mnt
mount: Operation not permitted
এটি হ'ল আমি আমার বাহ্যিক এসডি কার্ডের ২ য় পার্টিশনটি আমার EXT4-fs টি মাউন্ট করতে পারি না।
আমি আমার debootstrap
সুদৃ -় ডিম্বিয়ানকেও আঁকতে পারি না :
root@K01E_2:/ # chroot /data/debian/ /bin/bash
chroot() fail
Operation not permitted
এটি সেলইনুকসের কারণে?
আমি জানি না - সেলইনাক্সে আমি নতুন (খুব নতুন - এক সপ্তাহ বয়সী)। আমি ভেবেছিলাম যে আপনি যখন এটি ঘুমিয়ে রাখেন ( getenforce
"পার্মিসিভ" প্রতিবেদন করা) এটি আর হস্তক্ষেপ করে না ...
স্পষ্টতই, আমি ভুল ছিল। খরগোশের গর্তের নীচে আমরা আবার যাই ...
এটি কি আমার প্রক্রিয়া প্রসঙ্গে হতে পারে?
মনে আছে এটি id
ফিরে এসেছে ... "uid = 0 (মূল) জিড = 0 (মূল) ... প্রসঙ্গ = ইউ: আর: শেল: এস 0 "
আমি কি সেই প্রসঙ্গে পরিবর্তন করতে পারি? মূল এবং সমস্ত হয়েও কি আমি এখান থেকে সরে যেতে পারি shell
? এবং যদি তাই হয়, কি সরানো?
প্রথম প্রশ্নের উত্তর runcon
:
shell@K01E_2:/ $ runcon u:r:debuggerd:s0 /sbin/su
root@K01E_2:/ # id
uid=0(root) gid=0(root)... context=u:r:debuggerd:s0
ভাল. তবে কোন প্রসঙ্গ আমাকে অনুমতি দেবে mount
এবং chroot
?
আমার মূল মেশিনে ফিরে সেলইনক্স সম্পর্কে আরও কিছু পড়ার পরে আমি /sepolicy
ফাইলটির মূলটিতে পার্স করছি initrd.img
:
linuxbox$ $ sesearch -A sepolicy | grep chroot
allow init_shell init_shell : capability { chown sys_chroot ...
allow init init : capability { chown dac_read_search sys_chroot ...
allow kernel kernel : capability { chown dac_override sys_chroot ...
allow asus-dbug-d asus-dbug-d : capability { chown sys_chroot ...
...
ঠিক আছে, অনেকগুলি সম্ভাবনা! বিশেষত যে kernel
এক প্রতিশ্রুতিবদ্ধ বলে মনে হচ্ছে:
shell@K01E_2:/ $ runcon u:r:kernel:s0 /sbin/su
root@K01E_2:/ # id
uid=0(root) gid=0(root)... context=u:r:kernel:s0
root@K01E_2:/ # chroot /data/debian/ /bin/bash
chroot() fail
Operation not permitted
অভিশাপ।
কে হ্যাক আমাকে chroot
আইএনজি থেকে বাধা দিচ্ছে?
কোন পরামর্শ সর্বাধিক স্বাগত ...