
Hardware Hacking Cheatsheet
[[TOC]]
250-350 CVCC और GND अच्छी तरह से उजागर हों, बहुत उपयोगी हैGND, IN या RX, OUT या TX और VCC खोजें3/4 पिन खोजें
GND का संदर्भ खोजें
GND पर होती हैंVCC का संदर्भ खोजें
VCC पर होता हैGND के सापेक्ष UART पिनों की प्रतिरोधकता का परीक्षण करें (मल्टीमीटर को प्रतिरोध मापन पर रखें, आमतौर पर 200k)3.3V या 5V) चुनें, अन्यथा बोर्ड या सीरियल एडाप्टर क्षतिग्रस्त हो जाएगाRX को एडाप्टर TX से और बोर्ड TX को एडाप्टर RX से कनेक्ट करें
VCC पिन को कनेक्ट करने की आवश्यकता नहीं होतीsudo lsusb चलाएँls -lart /dev चलाएँ; हमारी फ़ाइल अंतिम में से एक होनी चाहिए, आमतौर पर ttyUSB0dialout समूह का सदस्य होना चाहिए (या होना चाहिए), अपने समूहों की जाँच करने के लिए चलाएँ0 या 1 पर सेट करनाTCK, TDI, TDO, TMS और TRST (वैकल्पिक) खोजें
TCK (टेस्ट क्लॉक): ड्रमर, या मेट्रोनोम जो नियंत्रक की गति निर्धारित करता है। इस पिन पर वोल्टेज बस एक लयबद्ध, स्थिर धड़कन में ऊपर-नीचे होता रहता है। क्लॉक की हर "धड़कन" पर नियंत्रक एक एकल क्रिया करता है।TMS (टेस्ट मोड सिलेक्ट): मोड सिलेक्ट पिन पर वोल्टेज नियंत्रित करते हैं कि JTAG कौन सी क्रिया करे। इस पिन पर वोल्टेज में हेरफेर करके, आप JTAG को बताते हैं कि आप उससे क्या करवाना चाहते हैं।3.3V या 5V), अन्यथा बोर्ड या सीरियल एडाप्टर क्षतिग्रस्त हो जाएगाopenocd -f $FT232HCONFIGFILE -f $BOARDCONFIGFILE
$FT232HCONFIGFILE: Focaccia बोर्ड संदर्भ$BOARDCONFIGFILE: जिस बोर्ड को आप हैक कर रहे हैं उसकी कॉन्फिग फ़ाइल (उपयोगी है लेकिन शायद आपके पास न हो, वैकल्पिक)
/usr/local के अंदर हैं, शायद यहाँ आपको कुछ उपयोगी $BOARDCONFIGFILE मिल सकती हैtelnet localhost 4444
U-Boot 1.1.3)ASIC MT7621A...)mtd->writesize=2048: पेज आकार (बाइट्स)mtd->oobsize=64: त्रुटि सुधार के लिए उपयोग किया जाने वाला डेटा (बाइट्स)devinfo.iowidth=8: प्रति ऑपरेशन लिखा/पढ़ा गया डेटा (बाइट्स)mtd->erasesize=131072: EEPROM शेष लेखन? (लगभग)TODO SPI डंप
TODO GDB अटैच????
/etc/rc/etc/rc.local/etc/rc.conf देखें/etc/rc.d/ निष्पादित करें/etc/inittab में हैं
runlevel
1: एकल उपयोगकर्ता मोड, रूट शेल, कोई पासवर्ड नहीं, कोई डेमॉन नहीं चल रहा3: टेक्स्ट आधारित मल्टीयूज़र मोड, लॉगिन प्रॉम्प्ट5: ग्राफिकल लॉगिन/etc/init.d/ निष्पादित करेंfile कमांड का उपयोग करके आसानQEMU निष्पादन योग्य प्रारूप ढूंढें: qemu-system-$PROCESSOR$ARCHITECTURE
qemu-system-mipselयदि आप प्रोसेसर परिवार जानते हैं तो आप इसे QEMU को बेहतर वातावरण का अनुकरण करने में मदद करने के लिए निर्दिष्ट कर सकते हैं
$QEMUBIN -cpu helpहमें कर्नेल और रूट फाइलसिस्टम की आवश्यकता है
कर्नेल संस्करण, libc संस्करण और हमारी रुचि के निष्पादन योग्य द्वारा उपयोग की जाने वाली लाइब्रेरी की सूची खोजें (readelf -d $EXECUTABLE)
mount -tubifs /dev/ubi${UBIDEVNUM}_0 /mnt/filesystem
```
1. कर्नेल मॉड्यूल के लिए बाइट्स पहचानें
- बूट के दौरान आमतौर पर NAND की जानकारी प्रिंट होती है, इसे देखें (ऊपर दिए गए चरण) और `NAND ID` खोजें, बाइट्स पहले, दूसरे और चौथे बाइट के क्रम में प्रिंट होते हैं
- हम यह जानकारी EEPROM की डेटाशीट खोजकर भी पा सकते हैं
- हम सही कमांड खोजने के लिए [यहाँ](http://www.linux-mtd.infradead.org/faq/nand.html#L_nand_nandsim) पर `writesize, oobsize, erasesize, iowidth` का भी उपयोग कर सकते हैं
- अन्यथा, परीक्षण और त्रुटि (trial and error)
2. बूट पर प्रिंट होने वाले EEPROM विभाजनों का विश्लेषण करें ताकि उनके आकार और नाम मिल सकें, `flash_erase` कमांड में अंतिम संख्या उनका आकार है जो `erasesize` से संबंधित है (जैसे `parts=x,y,z,...`)
3. डिवाइस से डंप किए गए विभाजनों को अभी बनाए गए विभाजनों में लोड करें
4. फाइलसिस्टम के लिए माउंटपॉइंट बनाएं और अटैच करें
- `-O`: वॉल्यूम आईडी हेडर ऑफसेट निर्दिष्ट करें, गलत होने पर भी सिस्टम आपको सही मान बता देगा, आप `512, 1024, 2048` जैसे अलग-अलग मान आज़मा सकते हैं (परीक्षण और त्रुटि)
- `-m`: `mtd` डिवाइस नंबर (बिंदु 3 देखें)
- `-d`: UBI डिवाइस नंबर (बिंदु 5 देखें)
5. माउंट करें
- यूज़र मोड: wine की तरह, केवल एक बाइनरी निष्पादित करें और उसे हमारे आर्किटेक्चर में "अनुवादित" करें
- नोट्स
- बहुत स्थिर नहीं है
- अजीब परिणाम दे सकता है
- कैसे करें
1. QEMU निष्पादन योग्य प्रारूप खोजें: `qemu-$PROCESSOR$ARCHITECTURE`
- उदाहरण: `qemu-mips64`
2. यदि QEMU लापता इंटरप्रेटर की शिकायत करता है तो इस इंटरप्रेटर को समाहित करने वाले **फ़ोल्डर का पथ** `-L` के साथ पास करें (या `man` देखें)
- यह जानने के लिए कि किसी निष्पादन योग्य द्वारा कौन सा इंटरप्रेटर उपयोग किया जाता है, `readelf -l $EXECUTABLE` का उपयोग करें
- वर्चुअलाइज़ेशन मोड: हमारे लिए दिलचस्प नहीं है
- buildroot और docker का उपयोग करके कर्नेल और रूट फाइलसिस्टम बनाना
- हमारे बनाए गए कर्नेल में (मूल कर्नेल की तुलना में) होना चाहिए
- समान कर्नेल संस्करण
- समान libc संस्करण (`uClibc, uClibc-ng, musl, dietlibc...`)
- समान लाइब्रेरी संस्करण (जिस निष्पादन योग्य में हमारी रुचि है)
1. buildroot का वह संस्करण खोजें जो हमारे डिवाइस के संस्करणों के सबसे निकट हो
- कभी-कभी बूट के दौरान/डंप की गई मेमोरी की खोज करते समय हम उपयोग किए गए buildroot का संस्करण पा सकते हैं (यदि डिवाइस buildroot का उपयोग करके बनाया गया था)
2. मिले buildroot संस्करण के साथ संगत linux संस्करण खोजें और एक docker कंटेनर बनाएं, [यहाँ](https://github.com/digiampietro/hacking-gemtek/blob/master/docker/Dockerfile) एक नमूना dockerfile है (buildroot चलाने के लिए पैकेज महत्वपूर्ण हैं)
3. चयनित buildroot संस्करण को [यहाँ](https://buildroot.org/downloads/) से डाउनलोड करें और उसे docker कंटेनर साझा फ़ोल्डर के अंदर रखें
4. docker कंटेनर चलाएं और उस पर स्विच करें
5. buildroot निकालें और buildroot का मैनुअल बनाने के लिए `make manual` चलाएं
6. `make help` का उपयोग करके buildroot सभी समर्थित डिवाइसों (बोर्ड) को प्रिंट करता है; अपने बोर्ड की buildroot कॉन्फ़िगरेशन फ़ाइल बनाने के लिए `make $YOURBOARDNAME` चलाएँ
7. हमारे बिल्ड में जोड़ने के लिए कर्नेल मॉड्यूल चुनने हेतु `make menuconfig` (टेक्स्ट आधारित) या `make xconfig` (GUI) चलाएँ, हम `make xconfig` का उपयोग करेंगे
- यहाँ एक उदाहरण/दिशानिर्देश है, लेकिन आपको स्वयं खोजना होगा कि आपके अनुप्रयोगों को चलाने के लिए विशेष रूप से कौन से मॉड्यूल चाहिए
- शॉर्टकट: मॉड्यूल खोजने के लिए `Edit->Find`
- विकल्प
- `Target options`
- `Show options and packages that are deprecated or obsolete` चुनें
- `Build packages with debugging symbols` को उच्चतम `debug level` के साथ चुनें
- `Strip command for binaries on target` को `None` पर सेट करें
- `GCC optimization level` को `0` पर सेट करें
- `Toolchain`
- `Toolchain type` को `Buildroot toolchain` पर सेट करें
- `Kernel headers` को `Manually specified linux version` पर सेट करें
- `Custom kernel headers series` को `$DEVICEKERNELVERSION` पर सेट करें
- `Linux version` को `$DEVICEKERNELVERSION` पर सेट करें
- `C library` को `$DEVICECLIBRARY` पर सेट करें
- `$DEVICECLIBRARY version` को `$DEVICECLIBRARY $DEVICELIBRARYVERSION` पर सेट करें
- `Enable large files` चुनें
- `Enable IPv6` चुनें
- `Enable RPC` चुनें
- `Enable WCHAR` चुनें
- `Thread library implementation` को `linuxthreads` पर सेट करें
- `Thread library debugging` चुनें
- `Build cross gdb for the host` चुनें
- `TUI support` चुनें
- `Python support` चुनें
- `GDB debugger version` को `$LATESTGDBVERSION` पर सेट करें
- `System configuration`
- `Passwords encoding` को `MD5` पर सेट करें
- `Init system` को `$DEVICEINITSYSTEM` (या `BusyBox`) पर सेट करें
- `/dev management` को `Dynamic using devtmpfs only` पर सेट करें
- `/bin/sh` को `Busybox default shell` पर सेट करें
- `Install timezone info` चुनें
- `Kernel`
- `Kernel version` को `$DEVICEKERNELVERSION` पर सेट करें
- `Kernel binary format` को `vmlinux` पर सेट करें
- `Target packages`
- `Compressors and decompressors`
- `bzip2` और `xz-utils`
- `Debugging profiling and benchmark`
- `gdb` और `full debugger` चुनें
- `Development tools`
- आपको जो भी चाहिए
- `Filesystem and flash utilities`
- `mtd, jffs2 and ubi/ubifs tools` (या आपको जो भी चाहिए)
- `Libraries`
- सामान्य तौर पर आपको जो चाहिए (नीचे सुझाव)
- `Crypto`
- `libsha1`
- `libssh2`
- `openssl`
- `JSON/XML`
- `expat`
- `json-c`
- `Networking applications`
- `rsync` और आपको जो चाहिए
- `Shell and utilities`
- `file`
- `Filesystem images`
- `ext2`
- `Host utilities` (यहाँ लक्ष्य डिवाइस के बारे में नहीं, बल्कि होस्ट डिवाइस की बात हो रही है)
- `host mtd, jffs2 and ubi/ubifs tools`
- `host util-linux`
- SAVE करना न भूलें
8. अभी परिभाषित कॉन्फ़िगरेशन को स्थायी रूप से सहेजने के लिए `make savedconfig` का उपयोग करें
9. `make linux-menuconfig` (टेक्स्ट आधारित) या `make linux-xconfig` (GUI) के साथ कर्नेल कॉन्फ़िगर करें, यहाँ हम CLI संस्करण का उपयोग करेंगे
- यहाँ एक उदाहरण/दिशानिर्देश है, लेकिन आपको स्वयं खोजना होगा कि आपके अनुप्रयोगों को चलाने के लिए विशेष रूप से कौन से मॉड्यूल चाहिए
- विकल्प
- `Kernel type` -> `Preemption model (Preemptible Kernel (Low-Latency Desktop))` -> `Preemptible Kernel (Low-Latency Desktop)`
- `Kernel type` -> `Device drivers` -> `Memory technology device (MTD) support` -> `NAND device support` -> `Support for NAND flash simulator`
- `Kernel type` -> `Device drivers` -> `Memory technology device (MTD) support` -> `UBI - Unsorted block images` -> `Enable UBI`
- `File systems` -> `Miscellaneous filesystem` -> `JFFS2 support`
- `File systems` -> `Miscellaneous filesystem` -> `UBIFS filesystem support`
- `Save`
10. `uClibc` (या आपकी c लाइब्रेरी) को `uclibc-menuconfig` का उपयोग करके कॉन्फ़िगर करें (हमेशा की तरह)
- डिबगिंग सक्षम करें: `Development/Debugging options` -> `Enable debugging symbols`, यदि यह काम नहीं करता है (संकलन त्रुटियाँ) तो `Development/Debugging options` -> `(Wall) compiler warnings` -> `-Wall -ggdb -g3` जोड़ें
- `-ggdb`: GDB के साथ उपयोग के लिए डिबगिंग जानकारी प्रदान करता है
- `-g3`: अतिरिक्त डिबगिंग जानकारी प्रदान करता है
- `Save`
- हमारे डिवाइस के अनुसार फीचर सक्षम करें (परीक्षण और त्रुटि, यदि त्रुटियाँ आती हैं तो जाँच करें और फिर आवश्यक फीचर के साथ पुनर्निर्माण करें)
11. `make` चलाएँ, यदि समस्याएँ आएँ तो वापस जाकर दोहराएँ
- संभावित संकलन त्रुटियाँ
- `Need to use -fPIC`
- `Toolchain` -> `Additional gcc options` के अंतर्गत कर्नेल मॉड्यूल (बिंदु 7) में `--enable-shared` जोड़ें या buildroot को पैच करें
- buildroot के कॉन्फ़िगरेशन फ़ाइलों को git के साथ सहेजना
- बाहरी ट्री कॉन्फ़िगरेशन (buildroot द्वारा समझे जाने वाले फ़ाइलों का ट्री दृश्य) (`br2`)
```
+-- board/
| +-- <company>/ (not always used)
| +-- <boardname>/
| +-- linux.config
| +-- busybox.config
| +-- kernel-defconfig (kernel config file)
| +-- <other configuration files>
| +-- post_build.sh (executed just before building the image, useful to copy root filesystem into the image)
| +-- post_image.sh
| +-- rootfs_overlay/ (everythin here will be copied in the final image)
| | +-- etc/
| | +-- <some file>
| +-- patches/
| +-- foo/
| | +-- <some patch>
| +-- libbar/
| +-- <some other patches>
|
+-- configs/
| +-- <boardname>_defconfig (buildroot config for our board)
| +-- uClibc.config (optional)
+-- patches/
| +-- (here patches to be applied)
|
+-- Config.in (if using a br2-external tree)
+-- external.mk (if using a br2-external tree)
+-- external.desc (if using a br2-external tree)
```
- बाहरी ट्री का उपयोग करने के लिए buildroot को इस प्रकार चलाएँ: `make BR2_EXTERNAL=$PATHTOEXTTREE $COMMAND`
- buildroot कॉन्फ़िग को हमारे बाहरी ट्री में सहेजने के लिए: `make BR2_EXTERNAL=$PATHTOEXTTREE savedefconfig`
- कर्नेल कॉन्फ़िग को हमारे बाहरी ट्री में सहेजने के लिए: `make BR2_EXTERNAL=$PATHTOEXTTREE linux-update-defconfig`
- uClibc कॉन्फ़िग को हमारे बाहरी ट्री में सहेजने के लिए: `make BR2_EXTERNAL=$PATHTOEXTTREE BR2_UCLIBC_CONFIG=$PATHWHERETOSAVEUCLIBCCONFIG uclibc-update-defconfig`
## स्रोत, श्रेय और धन्यवाद
- [Valerio Di Giampietro](https://va.ler.io/) ([@valerio](https://twitter.com/valerio)) का धन्यवाद, हार्डवेयर हैकिंग पर उनके अद्भुत youtube ट्यूटोरियल [चैनल](https://www.youtube.com/channel/UCoyNuc5bJ-z4X-6OlpNtJUw) के लिए, यहाँ जो कुछ भी लिखा गया है वह अधिकतर इन वीडियो से लिया गया है।
- [Luca Bongiorni](https://lockpicking.club/) ([@LucaBongiorni](https://twitter.com/LucaBongiorni)) का धन्यवाद, उनकी बहुमूल्य सलाह और हार्डवेयर उपकरणों के लिए।
- [सोल्डरिंग कॉमिक्स](https://mightyohm.com/files/soldercomic/FullSolderComic_EN.pdf) के लिए mightyohm.com का धन्यवाद
- मेरी मदद करने के लिए Reddit [hardwarehacking](https://www.reddit.com/r/hardwarehacking) समुदाय का धन्यवाद
- [[Noob] डायरेक्ट PCB सोल्डरिंग (शायद?)](https://www.reddit.com/r/hardwarehacking/comments/lrbtaa/noob_direct_pcb_soldering_maybe/?utm_medium=android_app&utm_source=share)
- वाया सोल्डरिंग ट्यूटोरियल के लिए [Andrew Paul](https://www.youtube.com/channel/UCtfcWatnWeEY_vq_UOL4PDQ) का धन्यवाद
- [Buildroot मैनुअल](https://buildroot.org/downloads/manual/manual.html)
- [JTAG समझाया गया](https://blog.senr.io/blog/jtag-explained)
- [OpenOCD - फ्लैश कमांड](http://openocd.org/doc/html/Flash-Commands.html)
- [OpenOCD + JTAG जानकारी](https://www.allaboutcircuits.com/technical-articles/getting-started-with-openocd-using-ft2232h-adapter-for-swd-debugging/)
- [हार्डवेयर हैकिंग चीटशीट - लघु PDF](https://github.com/arunmagesh/hw_hacking_cheatsheet/blob/master/cheatsheet_0.1.pdf)
- [OpenOCD](http://openocd.org/)
VCC के सापेक्ष UART पिनों की प्रतिरोधकता का परीक्षण करें (मल्टीमीटर को प्रतिरोध मापन पर रखें, आमतौर पर 200kOhm)GND के सापेक्ष UART पिनों का वोल्टेज परीक्षण करें (मल्टीमीटर को वोल्टेज मापन पर रखें, आमतौर पर 20V)TX UART पिन का वोल्टेज GND के सापेक्ष परीक्षण करें (मल्टीमीटर को वोल्टेज मापन पर रखें, आमतौर पर 20V); यदि वोल्टेज दोलन कर रहा है तो यह पिन शायद TX है (क्योंकि यह डेटा भेज रहा है)RX UART पिन का वोल्टेज GND के सापेक्ष परीक्षण करें (मल्टीमीटर को वोल्टेज मापन पर रखें, आमतौर पर 20V); यदि वोल्टेज 0 पर अटका है तो यह पिन शायद RX है (क्योंकि यह डेटा प्राप्त करने की प्रतीक्षा कर रहा है)तालिका
| PIN | GND प्रतिरोध | VCC प्रतिरोध | V | नोट्स |
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 | ||||
| 4 |
उदाहरण
115200)H प्रिंट हेल्प फ़ंक्शन है, इसका उपयोग हर जगह करेंGND को Jtagulator GND से, बोर्ड पिन 1,2,3 को Jtagulator चैनल 1,2,3 से कनेक्ट करेंV: कार्यशील वोल्टेज सेट करेंU: UART पहचान मेनू में प्रवेश करेंU: पहचान शुरू करेंText string to output: डिफ़ॉल्टStarting channel: वह चैनल जहाँ हमने बोर्ड का पिन 1 लगाया हैEnding channel: वह चैनल जहाँ हमने बोर्ड का पिन 3 लगाया हैIgnore non-printable characters: हाँrootgroups $USERscreen /dev/ttyUSB0 $BAUDRATE चलाएँ
$BAUDRATE यहाँ बताई गई बॉड दरों में से एक हो सकता है$BAUDRATE
1152009600576003840019200$BAUDRATE गड़बड़ करते हैं तो हमें बकवास दिख सकती है या कुछ भी नहींctrl + a -> k -> y: स्क्रीन बंद करें\r\n या \n?
pyserial का उपयोग करें, सीरियल संचार के लिए पायथन की लाइब्रेरी, उदाहरण:
#!/usr/bin/env python3
import serial
ser = serial.Serial('/dev/ttyUSB0', 115200, tmieout = 0.1)
ser.write(b"HELLO\r\n")
ser.write(b"HELLO\n")
TDI (टेस्ट डेटा-इन): वह पिन जो चिप में डेटा भेजता है। JTAG मानक इस पिन पर संचार के लिए प्रोटोकॉल परिभाषित नहीं करता। यह निर्माता पर छोड़ दिया गया है। जहाँ तक JTAG का सवाल है, यह पिन चिप में 1s और 0s के प्रवेश का एक माध्यम मात्र है। चिप उनके साथ क्या करती है, यह JTAG के लिए अप्रासंगिक है।TDO (टेस्ट डेटा-आउट): चिप से बाहर आने वाले डेटा के लिए पिन। डेटा-इन पिन की तरह, संचार प्रोटोकॉल JTAG द्वारा परिभाषित नहीं हैं।TRST (टेस्ट रीसेट, वैकल्पिक): इस सिग्नल का उपयोग JTAG को ज्ञात अच्छी स्थिति में रीसेट करने के लिए किया जाता है।5/6 पिनों की एक पंक्ति या 10, 12, 14, 20 पिनों की दोहरी पंक्ति खोजें
GND का संदर्भ खोजें
GND पर होती हैंVCC का संदर्भ खोजें
VCC पर होता हैGND के सापेक्ष JTAG पिनों की प्रतिरोधकता का परीक्षण करें (मल्टीमीटर को प्रतिरोध मापन पर रखें, आमतौर पर 200k)VCC के सापेक्ष JTAG पिनों की प्रतिरोधकता का परीक्षण करें (मल्टीमीटर को प्रतिरोध मापन पर रखें, आमतौर पर 200kOhm)GND के सापेक्ष JTAG पिनों का वोल्टेज परीक्षण करें (मल्टीमीटर को वोल्टेज मापन पर रखें, आमतौर पर 20V)तालिका
115200)H प्रिंट हेल्प फ़ंक्शन है, इसका उपयोग हर जगह करेंGND को Jtagulator GND से, बोर्ड पिन 1,2,3... को Jtagulator चैनल 1,2,3... से कनेक्ट करेंV: कार्यशील वोल्टेज सेट करेंJ: JTAG पहचान मेनू में प्रवेश करेंI: IDCODE स्कैन से पहचान करें, TDI नहीं मिलेगा (तेज़), बेहतर यदि मेरे पास पहचानने के लिए बहुत सारे पिन होंB: BYPASS स्कैन से पहचान करें, TDI मिलेगा (धीमा), बेहतर यदि मेरे पास पहचानने के लिए कम पिन होंStarting channel: वह चैनल जहाँ हम बोर्ड का पिन 1 लगाते हैंEnding channel: वह चैनल जहाँ हम बोर्ड का पिन n लगाते हैंAlready known pins: नहीं, लेकिन यदि हम पहले से कुछ पिन जानते हैं तो यह प्रक्रिया को तेज़ कर सकता हैVCC के बीच लगभग 300Ohm या 1kOhm का रेसिस्टर लगाकर हल कर सकते हैंhalt: CPU को रोकें (फ्रीज़ करने जैसा)
reset: CPU रीसेट करेंreg: CPU रजिस्टर पढ़ेंflash info bank $BANKID या flash info $BANKID: फ्लैश मेमोरी बैंक $BANKID के बारे में जानकारी प्रिंट करता है (मुझे लगता है कि बैंक = मेमोरी का खंड)flash list: प्रत्येक डिवाइस के लिए एसोसिएटिव ऐरे की सूची प्राप्त करता है जिसे flash bank ( $BOARDCONFIGFILE में) का उपयोग करके घोषित किया गया था, शून्य से क्रमांकितflash banks: प्रत्येक डिवाइस की एक-पंक्ति सारांश प्रिंट करता है जिसे flash bank ($BOARDCONFIGFILE में) का उपयोग करके घोषित किया गया था, शून्य से क्रमांकितflash write_image erase "$BINTOWRITE" $ADDRTOSTART: फ्लैश मेमोरी
$BINTOWRITE: bin (बाइनरी), ihex (Intel hex), elf (ELF फ़ाइल), s19 (Motorola s19), mem... हो सकता है$ADDRTOSTART: वह पता जहाँ से लिखना शुरू करना है (मुझे लगता है कि डिफ़ॉल्ट 0 है)flash dump_image $OUTFILE $ADDRTOSTART $SIZETODUMP: मेमोरी डंप करें
$OUTFILE: बाइनरी फ़ाइल जहाँ डंप सहेजना है$ADDRTOSTART: वह पता जहाँ से पढ़ना शुरू करना है (मुझे लगता है कि डिफ़ॉल्ट 0 है)$SIZETODUMP: डंप करने के लिए बाइट्स की संख्याinit started या ऐसा कुछ खोजें, यह संभवतः BusyBox स्ट्रिंग या इसी तरह की किसी चीज़ के पास होगाhelp कमांड आपका मित्र हैbinwalk, file और hexdump -C का उपयोग करें कि डंप की गई फ़ाइल ठीक है या नहीं और क्या यह संपीड़ित या एन्क्रिप्टेड है
binwalk -E के साथ हम फ़ाइल की एन्ट्रॉपी का विश्लेषण करते हैं
1 के निकट: यादृच्छिक, संपीड़ित या एन्क्रिप्टेड फ़ाइल1 से नीचे: सामान्य निष्पादन योग्य या फ़ाइलbinwalk -e का उपयोग करेंbinwalk डंप की गई छवि को पूरी तरह से नहीं समझता है तो हम EEPROM पार्टीशन तालिका (यदि पहले मिली हो) का उपयोग करके डंप की गई छवि को मैन्युअल रूप से कई उपयोगी छवियों में विभाजित कर सकते हैं
dd if=$IN_DUMPED_IMAGE of=$OUT_FILE bs=1024 skip=$BYTES_TO_SKIP_FROM_THE_START count=$HOW_MANY_BYTES_TO_WRITEsha1sum, md5sum या binwalk -W -i का उपयोग करें (यदि उदाहरण के लिए हमें लगता है कि वे समान छवि हो सकती हैं)binwalk (या dd यदि हम ऑनलाइन पा सकते हैं कि हमारी विशिष्ट कर्नेल छवि कैसे संरचित है) के साथ इसके घटकों को फिर से निकाल सकते हैंfakeroot -s fakeroot.dat usquashfs -d squashfs-root u04-sqfs.dat
fakeroot: नकली रूट वातावरण बनाएं, फ़ाइल अनुमतियों, डिवाइस फ़ाइलों का अनुकरण करने के लिए उपयोगी...
-s fakeroot.dat: कमांड fakeroot -i fakeroot.dat bash के साथ आगे पुनर्स्थापित करने के लिए नकली रूट वातावरण सहेजेंusquashfs: squashfs फाइलसिस्टम निकालें (आपके मामले में भिन्न हो सकता है)
-d squashfs-root: गंतव्य फ़ोल्डरu04-sqfs.dat: निकालने के लिए फाइलसिस्टम छवि/sbin/initfactory mode स्ट्रिंग देखें; यदि हम डिवाइस को फैक्ट्री मोड में डालने में सफल हो जाते हैं (यदि यह मौजूद है) तो इसे हैक करना बहुत आसान हैgrepfindxargsstringslibfoo.X.Y.ZX.Y.ZX असंगत ABIY पिछड़ा संगत ABIZ कोई ABI परिवर्तन नहींX.Y चाहिए
X, उच्च Yबिल्ड सिस्टम का उपयोग करके बनाएं (सुविधाओं का चयन करें और निर्भरताओं को स्वचालित रूप से ट्रैक करें)
एमुलेट करना शुरू करें
#!/bin/bash
# This script will build an environment without password for the user root
export QEMU_AUDIO_DRV="none" # ignore audio drivers
qemu-system-${PROCESSOR}${ARCHITECTURE} -M $CPUFAMILY \ # See point 2
-m $RAMSIZE \
-kernel $KERNELPATH \
-nographic \ # No GUI
-hda $FILESYSTEM \
-net nic,model=$NETCARDMODEL \ # Model of net card, driver must be included in kernel
-net user, hostfw=tcp::2222-:22, hostfw=tcp::9000-:9000 \ # 2222 as ssh and 9000 for GDB server
-no-reboot \ # Terminate the machine when is halted
-append "root=/dev/hda console=uart0" # Set root filesystem and console
LD_LIBRARY_PATH को इस प्रकार सेट करें (मशीन के अंदर): export LD_LIBRARY_PATH=/lib:/usr/lib:$PATHTOORIGINALFILESYSTEMLIBFOLDER#!/bin/bash
# Part 1: Identify bytes for kernel module
modprobe nandsim first_id_byte=$FIRSTBYTE \
second_id_byte=$SECONDBYTE \
third_id_byte=$THIRDBYTE \
fourth_id_byte=$FOURTHBYTE \
cache_file=/root/nandsim.bin \
parts=x,y,z,... # Define partitons size in number of erase blocks; the number of partitions depends on your device, partitions are usually print on boot
# Part 2: Erase partitions created (analyze EEPROM partitions)
flash_erase /dev/mtd0 0 8
flash_erase /dev/mtd1 0 20
# ...
# Part 3: Load partitions dumped from device in the ones just created
nandwrite /dev/mtd0 part0.bin
nandwrite /dev/mtd1 part1.bin
# ...
# Part 4: Create mountpoint for filesystem and attach (if UBIFS)
mkdir /mnt/filesystem
ubiattach -O $N -m $MTDDVENUM -d $UBIDEVNUM
| PIN | GND प्रतिरोध | VCC प्रतिरोध | V | नोट्स |
|---|
| 1 | 30kOhm | 0Ohm | 3.3V | VCC |
| 2 | 4.7kOhm | 34kOhm | 3.3V | 1.6-3.3V बूट पर - TX |
| 3 | INFOhm (मल्टीमीटर 1) | INFOhm (मल्टीमीटर 1) | 3.3V | 0V बूट पर - RX |
| 4 | 0Ohm | 30kOhm | 0V | GND |
| PIN | GND प्रतिरोध | VCC प्रतिरोध | V | नोट्स |
|---|
| 1 | ||||
| 2 | ||||
| 3 | ||||
| 4 | ||||
| 5 | ||||
| 6 | ||||
| 7 | ||||
| 8 | ||||
| 9 | ||||
| 10 | ||||
| ... |
उदाहरण
| PIN | GND प्रतिरोध | VCC प्रतिरोध | V | नोट्स |
|---|---|---|---|---|
| 1 | 1kOhm | 1kOhm | 0V | |
| 2 | 0Ohm | 90Ohm | 0V | GND |
| 3 | INFOhm (मल्टीमीटर 1) | INFOhm (मल्टीमीटर 1) | 2.1V | उच्च प्रतिबाधा, TDO? |
| 4 | 90Ohm | 0Ohm | 3.3V | VCC |
| 5 | 4.7kOhm | 4.7kOhm | 3.3V | |
| 6 | INFOhm (मल्टीमीटर 1) | INFOhm (मल्टीमीटर 1) | 0V | कनेक्टेड नहीं? |
| 7 | 5.7kOhm | 5.7kOhm | 3.3V | |
| 8 | INFOhm (मल्टीमीटर 1) | INFOhm (मल्टीमीटर 1) | 0V | कनेक्टेड नहीं? |
| 9 | 4.7kOhm | 4.7kOhm | 3.3V | |
| 10 | 0Ohm | 90Ohm | 0V | GND |