andydam, точно такой же как у poedCrack GUI... разница в том, что если к poedCrack он выпустил только графическую оболочку, то в AppCrack он приложил руку еще и к скрипту... хотя тоже лишь от части -> Автор CLI версии AppCrack - MadHouse. Сам интерфейс - по классу эконом. До выхода второй беты были страшные проблемы с отображением программ, но сейчас их вроде как и пофиксили. Найти deb пакет GUI версии вы можете в нашем репозитории. [CENTER][SIZE="5"][B]CLI версия[/B][/SIZE][/CENTER] Скрипт написаный MadHouse, внешне ничем не отличается от poedCrack... вообще по секрету они практически не отличаются - только вот AppCrack в отличии от детища poedGirl не может работать с Fat Binnary, по этому довольно неважно взламывает новые и большие приложения... Но коль пошла такая пьянка, то упомянем и про этот скрипт. 1)[URL="http://narod.ru/disk/19016706000/AppCrack.html"]Скачиваем[/URL] 2)Перетаскиваем в /usr/bin/ 3)Ставим права 777 [SIZE="5"]Команда[/SIZE]: [CODE]AppCrack %App_name% %user_name%[/CODE] Пример: [CODE]AppCrack RunCocos2D Comb[/CODE] [SPOILER="Зависимости"] [LIST] [*]Erica Utilities [*]Darwin CC Tools [*]GNU Debugger [*]Core Utilities [*]gawk [*]APT 0.6 Transitional [*]SQLite 3.x [*]SQLite 3.x Libraries [*]zip [/LIST] [/SPOILER] [HR="1"][/HR] [B][CENTER][SIZE="6"]AppBox[/SIZE][/CENTER][/B] [HR="1"][/HR] [IMG=RIGHT]http://i2.fastpic.ru/big/2010/0323/27/919044f56ee0d9f5a4e8d5298d436b27.jpg[/IMG]Замена Instal0us'а... Уже интересно? В принципе да, логически предположим что коли это замена Install0us'а, то и Craculous под нее тоже попадет? Кто знает... если судить о перспективах программы сейчас, то бушующее у нее определенно есть... Но явно не по тому что он лучше взламывает - а по тому что это несколько программ в одной. За основу Крака в ней взят немного дописанный скрипт AppCrack. Плюшка? Нет. Симбеоз - AppBox есть вторая попытка AppCrack'а придти на замену Crackulous'у. В первый раз когда Crackulous приостановился в развитии, это не вышло, помешал Install0us... Сейчас когда Install0us прекратил развиваться, почему бы не попытаться забрать его лавры себе? Шансы есть, осталось лишь найти желание разработчиков... Внедрить в AppBox Updatr, дабы возместить то чего все ждали от Install0us 3.0, и продолжать развивать AppCrack в сторону новых систем DRMv0.7 и Fat Binnary. Ну чтож будем ждать и уповать на обновления. Скачать deb пакет можно из нашего репо... вот только не утомитесь с зависимостями... Во первых AppBox нуждается во всех пакетах Install0us'а... А во вторых сам скрипт для кряка нуждается еще и в своих: И итого у нас получается нехилый списочек: [LIST] [*]Erica Utilities [*]Darwin CC Tools [*]GNU Debugger [*]Core Utilities [*]gawk [*]APT 0.6 Transitional [*]SQLite 3.x [*]SQLite 3.x Libraries [*]zip [*]unzip [*]UUID Generator [*]OpenSSL [*]cURL [*]sed [/LIST] [HR="1"][/HR] [CENTER][SIZE="6"][B]DeCript (IDCrack)[/B][/SIZE][/CENTER] [HR="1"][/HR] Оооо да... Куда же мы без OpenSource скрипта, следующий метод для или просто любопытных, или ТрутЪ Хакеров. Во первых, этот способ не требует каких либо конкретных программ, т.е. так можно взламывать даже на S_Light Custom'ах. Во вторых, в этом способе открытый код - можете сами его поправить или дописать. [SIZE="3"]Для взлома нужны пакеты[/SIZE]: [LIST] [*]com.ericasadun.utilities [*]gdb [*]gawk [*]zip [*]ldid [*]odcctools [/LIST] Взлом делается в два шага: 1)Найти программу [CODE]find /var/mobile/Applications/ -iname *.app[/CODE] 2)Взломать программу. [CODE]./DCrypt.sh "Monkey Ball"[/CODE] Как вы уже видите будет использоваться скрипт DCript.sh [SPOILER="DCript.sh"] [CODE] #!/bin/sh # # DeCrypt - v1.1 # - v1.1 (2008-10-21) # # Heavily based on xcrack # # Many thanks to: # puy0, SaladFork, Flox, Flawless # echo "DeCrypt 1.1" echo "FloydianSlip" echo "iGuides.ru" echo if [ ! -e /usr/bin/plutil ]; then echo "Cannot find plutil (apt-get install com.ericasadun.utilities)" exit 1 fi if [ ! -e /usr/bin/gdb ]; then echo "Cannot find gdb (apt-get install gdb)" exit 1 fi if [ ! -e /usr/bin/otool ]; then echo "Cannot find otool (apt-get install odcctools)" exit 1 fi if [ ! -e /usr/bin/ldid ]; then echo "Cannot find otool (apt-get install ldid)" exit 1 fi if [ ! -e /usr/bin/awk ]; then echo "Cannot find awk (apt-get install gawk)" exit 1 fi if [ ! -e /usr/bin/zip ]; then echo "Cannot find zip (apt-get install zip)" exit 1 fi if [ $# -ne 1 ]; then echo "Usage: $(basename $0) " echo exit 1 fi AppInput=$1 if [ -d "$AppInput" ]; then tempLoc=$AppInput else echo "Locating $AppInput" tempLoc=$(find /var/mobile/Applications -iname "$AppInput.app") if [ -z "$tempLoc" ]; then echo "Unable to locate $AppInput" exit 1 fi AppCount=$(find /var/mobile/Applications -iname "$AppInput.app" | wc -l) if [ $AppCount -gt 1 ]; then echo "Found two installation directories:" find /var/mobile/Applications -iname "$AppInput.app" exit 1 fi fi AppPath=$(dirname "$tempLoc") AppName=$(basename "$tempLoc") AppExec=$(plutil -v CFBundleExecutable "$tempLoc/Info.plist" 2>&1 | awk -F "] " '{ print $2 }') AppVer=$(plutil -v CFBundleVersion "$tempLoc/Info.plist" 2>&1 | awk -F "] " '{ print $2 }') AppDisplayName=$(plutil -v CFBundleDisplayName "$tempLoc/Info.plist" 2>&1 | awk -F "] " '{ print $2 }') if [ ! -d "$AppPath" ]; then echo "Unable to locate original installation directory" exit 1 fi if [ ! -d "$AppPath/$AppName" ]; then echo "Unable to locate .app directory" exit 1 fi if [ ! -e "$AppPath/$AppName/$AppExec" ]; then echo "Unable to locate executable" exit 1 fi echo "Found $AppName" echo "Creating directories" WorkDir="/tmp/DecryptApp-$(date +%Y%m%d-%H%M%S)" NewAppDir="$HOME/Documents/Decrypted" if [ -e "$WorkDir" ]; then rm -rf "$WorkDir" fi mkdir -p "$WorkDir" if [ ! -e "$NewAppDir" ]; then mkdir -p "$NewAppDir" fi if [ ! -d "$WorkDir" -o ! -d "$NewAppDir" ]; then echo "Unable to create Directories" exit 1 fi echo "Copying application files" cp -a "$AppPath/$AppName/" "$WorkDir/" if [ ! -e "$WorkDir/$AppName/$AppExec" ]; then echo "Unable to copy application files" rm -fr "$WorkDir" exit 1 fi echo "Analyzing application" CryptID=$(otool -l "$WorkDir/$AppName/$AppExec" | grep cryptid | awk '{print $2}') if [ $CryptID -ne "1" ]; then echo "Application is not encrypted" rm -fr "$WorkDir" exit 1 fi CryptSize=$(otool -l "$WorkDir/$AppName/$AppExec" | grep cryptsize | awk '{print $2}') if [ ! $CryptSize ]; then echo "Unable to find CryptSize" rm -fr "$WorkDir" exit 1 fi CryptOff=$(otool -l "$WorkDir/$AppName/$AppExec" | grep cryptoff | awk '{print $2}') if [ ! $CryptOff ]; then echo "Unable to find CryptOff" rm -fr "$WorkDir" exit 1 fi echo "Locating and patching CryptID" # "/System/Library/Frameworks" in hex PathAsHex="2f53797374656d2f4c6962726172792f4672616d65776f726b73" # - Convert to hex on 1 long line, only take stuff before the path string, # - Convert to 1 byte set per line, find 0x01 (line number is offset in the real file), # - Strip newlines, reverse the order oneLocations=($(od -A n -t x1 -v "$WorkDir/$AppName/$AppExec" | \ tr -d ' ','\n' | \ sed "s/$PathAsHex.*\$//" | \ sed "s/../&\n/g" | \ grep -n -s 01 | \ cut -d : -f 1 | \ sort -nr | \ tr "\n" " ")) for TryOffset in "${oneLocations[@]}"; do cp -a "$WorkDir/$AppName/$AppExec" "$WorkDir/$AppName/$AppExec.trying" foo=$(echo -ne "\x00" | dd bs=1 seek=$((TryOffset - 1)) conv=notrunc status=noxfer of="$WorkDir/$AppName/$AppExec.trying" 2>&1> /dev/null) cid=$(otool -l "$WorkDir/$AppName/$AppExec.trying" | grep cryptid | awk '{print $2}') if [ $cid -eq 0 ]; then break fi rm "$WorkDir/$AppName/$AppExec.trying" done if [ ! -e "$WorkDir/$AppName/$AppExec.trying" ]; then echo "Unable to find CryptID" rm -fr "$WorkDir" exit 1 fi mv "$WorkDir/$AppName/$AppExec.trying" "$WorkDir/$AppName/$AppExec" echo "Dumping unencrypted data from application" echo -e "set sharedlibrary load-rules \".*\" \".*\" none\r\n\ set inferior-auto-start-dyld off\r\n\ set sharedlibrary preload-libraries off\r\n\ set sharedlibrary load-dyld-symbols off\r\n\ handle all nostop\r\n\ break *0x2000\r\n commands 1\r\n\ dump memory $WorkDir/dump.bin 0x2000 $(($CryptSize + 0x2000))\r\n\ kill\r\n\ quit\r\n\ end\r\n\ start" > $WorkDir/batch.gdb foo=$(gdb -q -e "$AppPath/$AppName/$AppExec" -x $WorkDir/batch.gdb -batch 2>&1> /dev/null) rm $WorkDir/batch.gdb echo "Verifiying data dump" DumpSize=$(stat -c%s "$WorkDir/dump.bin") if [ "$DumpSize" != "$CryptSize" ]; then echo "Memory dump is not the right size or does not exist" rm -fr "$WorkDir" exit 1 fi echo "Replacing encrypted data with data dump" foo=$(dd seek=4096 bs=1 conv=notrunc if="$WorkDir/dump.bin" of="$WorkDir/$AppName/$AppExec" 2>&1> /dev/null) rm "$WorkDir/dump.bin" echo "Signing the application" foo=$(ldid -s "$WorkDir/$AppName/$AppExec" 2>&1> /dev/null) plutil -s 'SignerIdentity' -v 'Apple iPhone OS Application Signing' "$WorkDir/$AppName/Info.plist" 2>&1> /dev/null if [ -e "$WorkDir/$AppName/SC_Info" ]; then echo "Removing SC_Info" rm -fr "$WorkDir/$AppName/SC_Info" fi if [ -e "$WorkDir/$AppName/_CodeSignature" ]; then echo "Removing _CodeSignature" rm -fr "$WorkDir/$AppName/_CodeSignature" fi if [ -h "$WorkDir/$AppName/CodeResources" ]; then echo "Removing CodeResources" rm -fr "$WorkDir/$AppName/CodeResources" fi if [ -e "$WorkDir/$AppName/ResourceRules.plist" ]; then echo "Removing ResourceRules.plist" rm -fr "$WorkDir/$AppName/ResourceRules.plist" fi echo "Building .ipa" mkdir -p "$WorkDir/Payload" if [ ! -e "$WorkDir/Payload" ]; then echo "Failed to create Payload directory" rm -fr "$WorkDir" exit 1 fi mv "$WorkDir/$AppName" "$WorkDir/Payload/" echo "Copying iTunesArtwork" if [ -e "$AppPath/iTunesArtwork" ]; then cp -a "$AppPath/iTunesArtwork" "$WorkDir/" else echo "Unable to find iTunesArtwork" fi echo "Compressing the .ipa" IPAName=$NewAppDir/$(echo $AppDisplayName | sed -e "s: :_:g")-v$AppVer.ipa cd "$WorkDir" zip -m -r "$IPAName" * 2>&1> /dev/null cd - 2>&1> /dev/null if [ ! -e "$IPAName" ]; then echo "Failed to compress the .ipa" rm -fr "$WorkDir" exit 1 fi echo "Removing temporary files" rm -rf "$WorkDir" echo "Done" echo "Created decrypted .ipa at $IPAName"[/CODE] [/SPOILER] Используя этот метод можно отдельно сохранить IDCrypt используя примочку - AppExec, который так же можно сжать используя AdHoc Helper [SPOILER="AdHoc Helper"][CODE] otool -l `find /var/mobile/Applications -iname AdHoc` | grep cryptsize output-> cryptsize 8192 # get the cryptsize say 8192 gdb `find /var/mobile/Applications -iname AdHoc` (gdb) b *0x2000 Breakpoint 1 at 0x2000 (gdb) r (gdb) x/20i 0x2000 (gdb) dump binary memory /var/root/dump.bin 0x2000 (0x2000+8192) (gdb) kill Kill the program being debugged? (y or n) y (gdb) quit cd /var/root/ cp `find /var/mobile/Applications -iname AdHoc` . dd seek=4096 bs=1 conv=notrunc if=dump.bin of=AdHoc [/CODE][/SPOILER] [HR="1"][/HR] [B][CENTER][SIZE="6"]Советы мастеров[/SIZE][/CENTER][/B] [HR="1"][/HR] [CENTER][SIZE="5"]Совет №1[/SIZE] [SIZE="4"]Вставляем картинку с лого[/SIZE][/CENTER] Как я думаю все знают, есть три типа людей: Первые - Хакеры, на белых конях, которые покупают программы и взламывают их для всех... Вторые - Пользователи, просто любят Хакеров, за все счастье, что они принесли. И этой благодарности Хакерам хватает. Третьи - Комунисты... которые просто перекидывают чужие крями с ресурса на ресурс... Но это конечно не значит, что они поголовно "просто_не_хорошие_люди", большенство из них - просто распространяют труды хакеров.... но ведь есть и те кто хотят себе кусок пирога... Лично я считаю долгом защищать приложения от них. Как правило такие люди не важно знакомы с понятием взлома, и архитектурой IPA, по этому самая элементарная защита - уже хорошо. Мы например будем использовать картинку. Все предельно просто - перед тем как взламывать приложение, вам надо найти в его рабочей папке (//va/mobile/****-****-****-****/%Application%.app/) картинку которая используется при загрузке, и отредактировать ее. [B][COLOR="Red"][SIZE="3"]Важно[/SIZE][/COLOR][/B]: -Редактировать необходимо на компьютере. -Изменять размер изображения нельзя. -Нельзя нарушать альфа канал PNG (прозрачность) Чтобы всего этого избежать советую использовать Photoshop или тем кто не особо с ним дружит - Paint.NET. Т.е. в графическом редакторе мы просто открываем ниже приведенное лого как новый слой изображения. Смотрим как выглядит, при необходимости стираем какие-либо детали на оригинале. Сливаем слои. Сохраняем в том же формате в каком было оригинальное изображение (Глубину цвета ставим на Авто, порог прозрачности - 128) При особой необходимости используем программу iphonePNG. [SPOILER="Лого iGuides"] [IMG]http://i2.fastpic.ru/big/2010/0323/29/2e896fce772a1a032708ea6cea3ea129.png[/IMG] [IMG]http://i2.fastpic.ru/big/2010/0312/a1/14ca0bf56adf5fc84458ba79571790a1.png[/IMG] [/SPOILER] [CENTER][SIZE="5"][B]Совет №2[/B][/SIZE] [SIZE="4"]Побеждаем всплывающие окна.[/SIZE][/CENTER] [IMG=Right]http://i2.fastpic.ru/big/2010/0323/b8/99571e9406fdf5044748b654f95d4ab8.jpg[/IMG]Всплывающие окна стали весьма не хилой защитой в приложениях... например все помнят Comic Reader Mobi который очень долго никому не удавалось победить... все дело было в постоянно всплывающем окне, что версия - пиратская. Как ее тольео люди не пытались бить... и вырывали целые куски кода, что приводило к тому что программа работала ровно 10-15 минут, удаляли окошечко - теперь оно не мешало читать, но вот управление все равно отключалось... Но способы есть. Для начала поймем суть проблемы - UDID (Unique Device IDentifier)- Уникальный Идентификационный Номер Устройства. Суть в том что программа отправляет его на свой сервер чтобы проверить, а покупали ли программу с этого устройства? И если на сервере нет записи об этой покупке - дяденька, идите лесом. Но, почему бы тогда не сообщать серверу "Правильный ID"? Тут есть одна преграда. Обходить ее или нет - дело самого Хакера. А наше дело объяснить как это сделать. 1) Необходимо узнать свой ID, т.е. тот с которого была совершена покупка. Но не забываем что ID - номер устройства. А покупка производится с учетной записи, которая не привязана к девайсу. Вариант, что UDID попадает на сервер разработчика при покупке отпадает: при покупке нет никакой возможности угадать на какой девайс будет установлена программа, и узнать его UDID невозможно. Кроме того по пользовательскому соглашению приватности Apple не имеет права передавать какую-либо информацию разработчикам. Это уже очень хорошо! Просто поверте на слово, что это очень хорошо... 2)Раз первый вариант отпал, остается только второй - UDID попадает к разработчику при первом включении программы. А это воовсе замечательно! [IMG=LEFT]http://i2.fastpic.ru/big/2010/0323/6b/267e72c9dcab87bff91a046e943aaa6b.png[/IMG]Теперь правда немного о том как мы будем обманывать. тут нам поможет программа из Сидии UDIDFaker, кажись лежала в Репозитории Саурика. Суть ее в том что она позволяет менять UDID для определенной программы, т.е. перехватывает запрос программы и отвечает тем идентификатором, который ввел пользователь. Итого: мы можем менять UDID для любой программы, т.е. мы можем отправить на сервер любой ID номер какой захотим. И при этом будем его знать... Ну а коли мы знаем какой UDID считается у разработчика лицензионным, что нам мешает сообщать его же, но уже с другого устройства? Ну думаю первичный смысл всем понятен: -Заменил UDID. -Включил программу, дабы она отослала запрос на сервер. -Взломал CryptID, отвязал от Аккаунта. -Установил на другой девайс -Заменил UDID, на тот который использовался в первый раз. -Включил программу, словил счастье. [SIZE="3"]А теперь о проблемах которые могут возникать[/SIZE]: Вариант №1 - UDID прописывается в файл CryptID, и стало быть на конечном устройстве UDIDFaker не нужен, он даже не будет спрашивать. НО все не так хорошо как казалось бы. Не забываем что CryptID удаляется в ходе отвязки от аккаунта, а значит программа отправит пустой запрос на сервер, и программа снова будет пиратской. Выходи из проблемы - Использовать DCrypt настроенный чтобы не полностью удалять IDCrypt. Вариант №2 - Вместе с UDID, на сервер отправляется ECID (просто другие идентификаторы отправлять - незаконно). А вот ECID уже подделать не удастся... [admin="fox_sash"][center]Ждем также советов наших "бывалых" релизеров ;) Будем пополняться и развиваться![/center][/admin]"/> andydam, точно такой же как у poedCrack GUI... разница в том, что если к poedCrack он выпустил только графическую оболочку, то в AppCrack он приложил руку еще и к скрипту... хотя тоже лишь от части -> Автор CLI версии AppCrack - MadHouse. Сам интерфейс - по классу эконом. До выхода второй беты были страшные проблемы с отображением программ, но сейчас их вроде как и пофиксили. Найти deb пакет GUI версии вы можете в нашем репозитории. [CENTER][SIZE="5"][B]CLI версия[/B][/SIZE][/CENTER] Скрипт написаный MadHouse, внешне ничем не отличается от poedCrack... вообще по секрету они практически не отличаются - только вот AppCrack в отличии от детища poedGirl не может работать с Fat Binnary, по этому довольно неважно взламывает новые и большие приложения... Но коль пошла такая пьянка, то упомянем и про этот скрипт. 1)[URL="http://narod.ru/disk/19016706000/AppCrack.html"]Скачиваем[/URL] 2)Перетаскиваем в /usr/bin/ 3)Ставим права 777 [SIZE="5"]Команда[/SIZE]: [CODE]AppCrack %App_name% %user_name%[/CODE] Пример: [CODE]AppCrack RunCocos2D Comb[/CODE] [SPOILER="Зависимости"] [LIST] [*]Erica Utilities [*]Darwin CC Tools [*]GNU Debugger [*]Core Utilities [*]gawk [*]APT 0.6 Transitional [*]SQLite 3.x [*]SQLite 3.x Libraries [*]zip [/LIST] [/SPOILER] [HR="1"][/HR] [B][CENTER][SIZE="6"]AppBox[/SIZE][/CENTER][/B] [HR="1"][/HR] [IMG=RIGHT]http://i2.fastpic.ru/big/2010/0323/27/919044f56ee0d9f5a4e8d5298d436b27.jpg[/IMG]Замена Instal0us'а... Уже интересно? В принципе да, логически предположим что коли это замена Install0us'а, то и Craculous под нее тоже попадет? Кто знает... если судить о перспективах программы сейчас, то бушующее у нее определенно есть... Но явно не по тому что он лучше взламывает - а по тому что это несколько программ в одной. За основу Крака в ней взят немного дописанный скрипт AppCrack. Плюшка? Нет. Симбеоз - AppBox есть вторая попытка AppCrack'а придти на замену Crackulous'у. В первый раз когда Crackulous приостановился в развитии, это не вышло, помешал Install0us... Сейчас когда Install0us прекратил развиваться, почему бы не попытаться забрать его лавры себе? Шансы есть, осталось лишь найти желание разработчиков... Внедрить в AppBox Updatr, дабы возместить то чего все ждали от Install0us 3.0, и продолжать развивать AppCrack в сторону новых систем DRMv0.7 и Fat Binnary. Ну чтож будем ждать и уповать на обновления. Скачать deb пакет можно из нашего репо... вот только не утомитесь с зависимостями... Во первых AppBox нуждается во всех пакетах Install0us'а... А во вторых сам скрипт для кряка нуждается еще и в своих: И итого у нас получается нехилый списочек: [LIST] [*]Erica Utilities [*]Darwin CC Tools [*]GNU Debugger [*]Core Utilities [*]gawk [*]APT 0.6 Transitional [*]SQLite 3.x [*]SQLite 3.x Libraries [*]zip [*]unzip [*]UUID Generator [*]OpenSSL [*]cURL [*]sed [/LIST] [HR="1"][/HR] [CENTER][SIZE="6"][B]DeCript (IDCrack)[/B][/SIZE][/CENTER] [HR="1"][/HR] Оооо да... Куда же мы без OpenSource скрипта, следующий метод для или просто любопытных, или ТрутЪ Хакеров. Во первых, этот способ не требует каких либо конкретных программ, т.е. так можно взламывать даже на S_Light Custom'ах. Во вторых, в этом способе открытый код - можете сами его поправить или дописать. [SIZE="3"]Для взлома нужны пакеты[/SIZE]: [LIST] [*]com.ericasadun.utilities [*]gdb [*]gawk [*]zip [*]ldid [*]odcctools [/LIST] Взлом делается в два шага: 1)Найти программу [CODE]find /var/mobile/Applications/ -iname *.app[/CODE] 2)Взломать программу. [CODE]./DCrypt.sh "Monkey Ball"[/CODE] Как вы уже видите будет использоваться скрипт DCript.sh [SPOILER="DCript.sh"] [CODE] #!/bin/sh # # DeCrypt - v1.1 # - v1.1 (2008-10-21) # # Heavily based on xcrack # # Many thanks to: # puy0, SaladFork, Flox, Flawless # echo "DeCrypt 1.1" echo "FloydianSlip" echo "iGuides.ru" echo if [ ! -e /usr/bin/plutil ]; then echo "Cannot find plutil (apt-get install com.ericasadun.utilities)" exit 1 fi if [ ! -e /usr/bin/gdb ]; then echo "Cannot find gdb (apt-get install gdb)" exit 1 fi if [ ! -e /usr/bin/otool ]; then echo "Cannot find otool (apt-get install odcctools)" exit 1 fi if [ ! -e /usr/bin/ldid ]; then echo "Cannot find otool (apt-get install ldid)" exit 1 fi if [ ! -e /usr/bin/awk ]; then echo "Cannot find awk (apt-get install gawk)" exit 1 fi if [ ! -e /usr/bin/zip ]; then echo "Cannot find zip (apt-get install zip)" exit 1 fi if [ $# -ne 1 ]; then echo "Usage: $(basename $0) " echo exit 1 fi AppInput=$1 if [ -d "$AppInput" ]; then tempLoc=$AppInput else echo "Locating $AppInput" tempLoc=$(find /var/mobile/Applications -iname "$AppInput.app") if [ -z "$tempLoc" ]; then echo "Unable to locate $AppInput" exit 1 fi AppCount=$(find /var/mobile/Applications -iname "$AppInput.app" | wc -l) if [ $AppCount -gt 1 ]; then echo "Found two installation directories:" find /var/mobile/Applications -iname "$AppInput.app" exit 1 fi fi AppPath=$(dirname "$tempLoc") AppName=$(basename "$tempLoc") AppExec=$(plutil -v CFBundleExecutable "$tempLoc/Info.plist" 2>&1 | awk -F "] " '{ print $2 }') AppVer=$(plutil -v CFBundleVersion "$tempLoc/Info.plist" 2>&1 | awk -F "] " '{ print $2 }') AppDisplayName=$(plutil -v CFBundleDisplayName "$tempLoc/Info.plist" 2>&1 | awk -F "] " '{ print $2 }') if [ ! -d "$AppPath" ]; then echo "Unable to locate original installation directory" exit 1 fi if [ ! -d "$AppPath/$AppName" ]; then echo "Unable to locate .app directory" exit 1 fi if [ ! -e "$AppPath/$AppName/$AppExec" ]; then echo "Unable to locate executable" exit 1 fi echo "Found $AppName" echo "Creating directories" WorkDir="/tmp/DecryptApp-$(date +%Y%m%d-%H%M%S)" NewAppDir="$HOME/Documents/Decrypted" if [ -e "$WorkDir" ]; then rm -rf "$WorkDir" fi mkdir -p "$WorkDir" if [ ! -e "$NewAppDir" ]; then mkdir -p "$NewAppDir" fi if [ ! -d "$WorkDir" -o ! -d "$NewAppDir" ]; then echo "Unable to create Directories" exit 1 fi echo "Copying application files" cp -a "$AppPath/$AppName/" "$WorkDir/" if [ ! -e "$WorkDir/$AppName/$AppExec" ]; then echo "Unable to copy application files" rm -fr "$WorkDir" exit 1 fi echo "Analyzing application" CryptID=$(otool -l "$WorkDir/$AppName/$AppExec" | grep cryptid | awk '{print $2}') if [ $CryptID -ne "1" ]; then echo "Application is not encrypted" rm -fr "$WorkDir" exit 1 fi CryptSize=$(otool -l "$WorkDir/$AppName/$AppExec" | grep cryptsize | awk '{print $2}') if [ ! $CryptSize ]; then echo "Unable to find CryptSize" rm -fr "$WorkDir" exit 1 fi CryptOff=$(otool -l "$WorkDir/$AppName/$AppExec" | grep cryptoff | awk '{print $2}') if [ ! $CryptOff ]; then echo "Unable to find CryptOff" rm -fr "$WorkDir" exit 1 fi echo "Locating and patching CryptID" # "/System/Library/Frameworks" in hex PathAsHex="2f53797374656d2f4c6962726172792f4672616d65776f726b73" # - Convert to hex on 1 long line, only take stuff before the path string, # - Convert to 1 byte set per line, find 0x01 (line number is offset in the real file), # - Strip newlines, reverse the order oneLocations=($(od -A n -t x1 -v "$WorkDir/$AppName/$AppExec" | \ tr -d ' ','\n' | \ sed "s/$PathAsHex.*\$//" | \ sed "s/../&\n/g" | \ grep -n -s 01 | \ cut -d : -f 1 | \ sort -nr | \ tr "\n" " ")) for TryOffset in "${oneLocations[@]}"; do cp -a "$WorkDir/$AppName/$AppExec" "$WorkDir/$AppName/$AppExec.trying" foo=$(echo -ne "\x00" | dd bs=1 seek=$((TryOffset - 1)) conv=notrunc status=noxfer of="$WorkDir/$AppName/$AppExec.trying" 2>&1> /dev/null) cid=$(otool -l "$WorkDir/$AppName/$AppExec.trying" | grep cryptid | awk '{print $2}') if [ $cid -eq 0 ]; then break fi rm "$WorkDir/$AppName/$AppExec.trying" done if [ ! -e "$WorkDir/$AppName/$AppExec.trying" ]; then echo "Unable to find CryptID" rm -fr "$WorkDir" exit 1 fi mv "$WorkDir/$AppName/$AppExec.trying" "$WorkDir/$AppName/$AppExec" echo "Dumping unencrypted data from application" echo -e "set sharedlibrary load-rules \".*\" \".*\" none\r\n\ set inferior-auto-start-dyld off\r\n\ set sharedlibrary preload-libraries off\r\n\ set sharedlibrary load-dyld-symbols off\r\n\ handle all nostop\r\n\ break *0x2000\r\n commands 1\r\n\ dump memory $WorkDir/dump.bin 0x2000 $(($CryptSize + 0x2000))\r\n\ kill\r\n\ quit\r\n\ end\r\n\ start" > $WorkDir/batch.gdb foo=$(gdb -q -e "$AppPath/$AppName/$AppExec" -x $WorkDir/batch.gdb -batch 2>&1> /dev/null) rm $WorkDir/batch.gdb echo "Verifiying data dump" DumpSize=$(stat -c%s "$WorkDir/dump.bin") if [ "$DumpSize" != "$CryptSize" ]; then echo "Memory dump is not the right size or does not exist" rm -fr "$WorkDir" exit 1 fi echo "Replacing encrypted data with data dump" foo=$(dd seek=4096 bs=1 conv=notrunc if="$WorkDir/dump.bin" of="$WorkDir/$AppName/$AppExec" 2>&1> /dev/null) rm "$WorkDir/dump.bin" echo "Signing the application" foo=$(ldid -s "$WorkDir/$AppName/$AppExec" 2>&1> /dev/null) plutil -s 'SignerIdentity' -v 'Apple iPhone OS Application Signing' "$WorkDir/$AppName/Info.plist" 2>&1> /dev/null if [ -e "$WorkDir/$AppName/SC_Info" ]; then echo "Removing SC_Info" rm -fr "$WorkDir/$AppName/SC_Info" fi if [ -e "$WorkDir/$AppName/_CodeSignature" ]; then echo "Removing _CodeSignature" rm -fr "$WorkDir/$AppName/_CodeSignature" fi if [ -h "$WorkDir/$AppName/CodeResources" ]; then echo "Removing CodeResources" rm -fr "$WorkDir/$AppName/CodeResources" fi if [ -e "$WorkDir/$AppName/ResourceRules.plist" ]; then echo "Removing ResourceRules.plist" rm -fr "$WorkDir/$AppName/ResourceRules.plist" fi echo "Building .ipa" mkdir -p "$WorkDir/Payload" if [ ! -e "$WorkDir/Payload" ]; then echo "Failed to create Payload directory" rm -fr "$WorkDir" exit 1 fi mv "$WorkDir/$AppName" "$WorkDir/Payload/" echo "Copying iTunesArtwork" if [ -e "$AppPath/iTunesArtwork" ]; then cp -a "$AppPath/iTunesArtwork" "$WorkDir/" else echo "Unable to find iTunesArtwork" fi echo "Compressing the .ipa" IPAName=$NewAppDir/$(echo $AppDisplayName | sed -e "s: :_:g")-v$AppVer.ipa cd "$WorkDir" zip -m -r "$IPAName" * 2>&1> /dev/null cd - 2>&1> /dev/null if [ ! -e "$IPAName" ]; then echo "Failed to compress the .ipa" rm -fr "$WorkDir" exit 1 fi echo "Removing temporary files" rm -rf "$WorkDir" echo "Done" echo "Created decrypted .ipa at $IPAName"[/CODE] [/SPOILER] Используя этот метод можно отдельно сохранить IDCrypt используя примочку - AppExec, который так же можно сжать используя AdHoc Helper [SPOILER="AdHoc Helper"][CODE] otool -l `find /var/mobile/Applications -iname AdHoc` | grep cryptsize output-> cryptsize 8192 # get the cryptsize say 8192 gdb `find /var/mobile/Applications -iname AdHoc` (gdb) b *0x2000 Breakpoint 1 at 0x2000 (gdb) r (gdb) x/20i 0x2000 (gdb) dump binary memory /var/root/dump.bin 0x2000 (0x2000+8192) (gdb) kill Kill the program being debugged? (y or n) y (gdb) quit cd /var/root/ cp `find /var/mobile/Applications -iname AdHoc` . dd seek=4096 bs=1 conv=notrunc if=dump.bin of=AdHoc [/CODE][/SPOILER] [HR="1"][/HR] [B][CENTER][SIZE="6"]Советы мастеров[/SIZE][/CENTER][/B] [HR="1"][/HR] [CENTER][SIZE="5"]Совет №1[/SIZE] [SIZE="4"]Вставляем картинку с лого[/SIZE][/CENTER] Как я думаю все знают, есть три типа людей: Первые - Хакеры, на белых конях, которые покупают программы и взламывают их для всех... Вторые - Пользователи, просто любят Хакеров, за все счастье, что они принесли. И этой благодарности Хакерам хватает. Третьи - Комунисты... которые просто перекидывают чужие крями с ресурса на ресурс... Но это конечно не значит, что они поголовно "просто_не_хорошие_люди", большенство из них - просто распространяют труды хакеров.... но ведь есть и те кто хотят себе кусок пирога... Лично я считаю долгом защищать приложения от них. Как правило такие люди не важно знакомы с понятием взлома, и архитектурой IPA, по этому самая элементарная защита - уже хорошо. Мы например будем использовать картинку. Все предельно просто - перед тем как взламывать приложение, вам надо найти в его рабочей папке (//va/mobile/****-****-****-****/%Application%.app/) картинку которая используется при загрузке, и отредактировать ее. [B][COLOR="Red"][SIZE="3"]Важно[/SIZE][/COLOR][/B]: -Редактировать необходимо на компьютере. -Изменять размер изображения нельзя. -Нельзя нарушать альфа канал PNG (прозрачность) Чтобы всего этого избежать советую использовать Photoshop или тем кто не особо с ним дружит - Paint.NET. Т.е. в графическом редакторе мы просто открываем ниже приведенное лого как новый слой изображения. Смотрим как выглядит, при необходимости стираем какие-либо детали на оригинале. Сливаем слои. Сохраняем в том же формате в каком было оригинальное изображение (Глубину цвета ставим на Авто, порог прозрачности - 128) При особой необходимости используем программу iphonePNG. [SPOILER="Лого iGuides"] [IMG]http://i2.fastpic.ru/big/2010/0323/29/2e896fce772a1a032708ea6cea3ea129.png[/IMG] [IMG]http://i2.fastpic.ru/big/2010/0312/a1/14ca0bf56adf5fc84458ba79571790a1.png[/IMG] [/SPOILER] [CENTER][SIZE="5"][B]Совет №2[/B][/SIZE] [SIZE="4"]Побеждаем всплывающие окна.[/SIZE][/CENTER] [IMG=Right]http://i2.fastpic.ru/big/2010/0323/b8/99571e9406fdf5044748b654f95d4ab8.jpg[/IMG]Всплывающие окна стали весьма не хилой защитой в приложениях... например все помнят Comic Reader Mobi который очень долго никому не удавалось победить... все дело было в постоянно всплывающем окне, что версия - пиратская. Как ее тольео люди не пытались бить... и вырывали целые куски кода, что приводило к тому что программа работала ровно 10-15 минут, удаляли окошечко - теперь оно не мешало читать, но вот управление все равно отключалось... Но способы есть. Для начала поймем суть проблемы - UDID (Unique Device IDentifier)- Уникальный Идентификационный Номер Устройства. Суть в том что программа отправляет его на свой сервер чтобы проверить, а покупали ли программу с этого устройства? И если на сервере нет записи об этой покупке - дяденька, идите лесом. Но, почему бы тогда не сообщать серверу "Правильный ID"? Тут есть одна преграда. Обходить ее или нет - дело самого Хакера. А наше дело объяснить как это сделать. 1) Необходимо узнать свой ID, т.е. тот с которого была совершена покупка. Но не забываем что ID - номер устройства. А покупка производится с учетной записи, которая не привязана к девайсу. Вариант, что UDID попадает на сервер разработчика при покупке отпадает: при покупке нет никакой возможности угадать на какой девайс будет установлена программа, и узнать его UDID невозможно. Кроме того по пользовательскому соглашению приватности Apple не имеет права передавать какую-либо информацию разработчикам. Это уже очень хорошо! Просто поверте на слово, что это очень хорошо... 2)Раз первый вариант отпал, остается только второй - UDID попадает к разработчику при первом включении программы. А это воовсе замечательно! [IMG=LEFT]http://i2.fastpic.ru/big/2010/0323/6b/267e72c9dcab87bff91a046e943aaa6b.png[/IMG]Теперь правда немного о том как мы будем обманывать. тут нам поможет программа из Сидии UDIDFaker, кажись лежала в Репозитории Саурика. Суть ее в том что она позволяет менять UDID для определенной программы, т.е. перехватывает запрос программы и отвечает тем идентификатором, который ввел пользователь. Итого: мы можем менять UDID для любой программы, т.е. мы можем отправить на сервер любой ID номер какой захотим. И при этом будем его знать... Ну а коли мы знаем какой UDID считается у разработчика лицензионным, что нам мешает сообщать его же, но уже с другого устройства? Ну думаю первичный смысл всем понятен: -Заменил UDID. -Включил программу, дабы она отослала запрос на сервер. -Взломал CryptID, отвязал от Аккаунта. -Установил на другой девайс -Заменил UDID, на тот который использовался в первый раз. -Включил программу, словил счастье. [SIZE="3"]А теперь о проблемах которые могут возникать[/SIZE]: Вариант №1 - UDID прописывается в файл CryptID, и стало быть на конечном устройстве UDIDFaker не нужен, он даже не будет спрашивать. НО все не так хорошо как казалось бы. Не забываем что CryptID удаляется в ходе отвязки от аккаунта, а значит программа отправит пустой запрос на сервер, и программа снова будет пиратской. Выходи из проблемы - Использовать DCrypt настроенный чтобы не полностью удалять IDCrypt. Вариант №2 - Вместе с UDID, на сервер отправляется ECID (просто другие идентификаторы отправлять - незаконно). А вот ECID уже подделать не удастся... [admin="fox_sash"][center]Ждем также советов наших "бывалых" релизеров ;) Будем пополняться и развиваться![/center][/admin]">

[Manual] Отвязка приложения от аккаунта

JagdCrab
iOS Support Приложения для iOS
[HR="2"][/HR]

Итак, для начала вспомним, что такое Cracked IPA - это IPA файл, с программой (!!!) в которой удален "CryptID" т.е. та часть в которой содержатся сведения с какого аккаунта была произведена покупка, если его удалить, то Tunes не сможет спросить авторизацию, т.к. не будет знать к чему. Правда в таких ситуациях если он не может узнать кем куплена программа возникает ошибка авторизации, которая в свою очередь лечится installd и AppSync.
Далее я привиду несколько примеров программ которые помогут вам "отвязать" программы от своего аккаунта, дабы можно было поделится ими с друзьями.

[HR="1"][/HR]
poedCrack
[HR="1"][/HR]
Разработка Австралийской хакерши poedGirl, которая в прочем активно сотрудничает с командой Hackolous'а. Мой личный выбор, из плюсов данного продукта отмечу его возможность работать с "Fat Binary" т.е. расшифровывать большие программы (но сразу замечу - эта функция доступна только iPhone 3Gs и ipod Touch 3G - другим на это несколько не хватает оперативной памяти)

GUI версия

Разработана andydam на основе poedCrack. Это именно GUI оболочка, а не самостоятельная программа, т.е. работать без установленной CLI версии она не будет. Конечно, красиво, довольно удобно, но из-за GUI версии возникают проблемы при использовании CLI. Именно GUI оболочка - причина самой распространенной проблемы "Unable to find CryptSize" (как ее лечить, читайте дальше).
Ах, да программа спрашивает у вас ник того кто взломал программ... правда куда он исчезает - еще предстоит разгадать.
Устанавливать довольно легко: сначала ставим CLI версию, а потом deb пакет. (скачать их можно ниже)

CLI версия
CLI версия poedCrack используется как и любая другая консольная программа, через Terminal.
Устанавливаем ее так:
1)Проверяем, установлены ли у нас зависимости через Cydia, если необходимо доставляем необходимые.
2)Копируем файл poedCrack в //bin/
3)Назначаем права на файл 777 root:wheel
Используем ее так:
poedCrack %Application_name%


Важно:
-Имя взламываемого приложения должно писаться как название папки app в которой он лежит
Пример: программа на спрингборде и в AppStore называется Run!, но в файловой системе - //var/mobile/Applications/A92001BB-F4D1-4E90-8FCF-CC193CBE3FBF/RunCocos2D.app, а значит команда будет выглядит как:
poedCrack RunCocos2D


-Если в имени приложения есть пробел, то оно должно писаться между ковычек
Пример:
poedCrack "Run Cocos 2D"


-Если возникает ошибка
/bin/poedCrack: fork: retry: Resource temporarily unavailble
Unable to find CryptSize

Необходимо удалить файл poedCrack из //bin, перезагрузить девайс, вернуть poedCrack на место, назначить повторно права.


Список обязательных зависимостей


[HR="1"][/HR]
Crackulous

[HR="1"][/HR]
Программа, явно заслуживающая доверия, хотя бы за то что сделана она авторами AppSync, Install0us, AppTrackr. Этим все сказано. Регулярно обновляется, по этому минусов становится все меньше и меньше...Отлично интегрирована с рабочими утилитами Cydia... в общем минус только один -  и он точно такой же какой и плюс - Hackolous, они уже давно поняли на что способны по этому стали требовать денежку за самые вкусные плюшки... Так например новая Crackulous 1.0 RC1 Beta доступна только тем кто не поленится внести 30$ жертвоприношений в кошелек ресурса...
Как я уже говорил программа оснащена обычным GUI интерфейсом, немного более толстым чем у poedCrack, но принцип работы тот-же выбрал приложение - нажал - Crack.

С технической точки зрения программа использует последнюю версию xCrack, но опять же это весьма двоякое утверждение, ибо изначально она была разработана для 2.2.1, а потом буквально за уши вытащена  на 3.0... вроде бы опыт накопленный с прошивки 2.2, а вроде бы, те ошметочки которые остались... Ну это конечно никто не скрывал, и первое время после выхода 3.0 Craculous был вовсе не жизнеспособен... прошло время, проблему пофиксили, но насколько удачно вам никто не скажет...

Из разряда интересно, но не нужно - Crackulous способен взламывать сразу несколько приложений.... вот только зачем? -_-

Зависимости:
  • Erica Utilities
  • GNU Debugger
  • Darwin CC Tools
  • Link Identity Editor
  • Source GUI
  • zip
  • Gawk

Скачать и установить deb пакет можно самым простым и привычным способом из репозитория сами_знаете_кого.
А, и рекомендую использовать его только вместе с Install0us... может рекламный ход, может очередной баг, но некоторые приложения взломанные Кракулусом, установяться только через него.

[HR="1"][/HR]
AppCrack
[HR="1"][/HR]
AppCrack - приложение появившееся сразу после выхода 3.0, сначала ему грезили стать приемником Crackulous'а, который в то время все еще не работал с третьей версией прошивки, но этого так и не произошло, он сам наступил на грабли своего предшественника - как только вышла 3.1 он выпал из жизни, слишком много ошибок возникало с взломом новой DRM v0.7 которая появилась в приложениях после 3.1, благо сейчас все несколько наладилось, и хоть некоторый коэффициент неудач остался, AppCrack снова может взламывать.

GUI версия
Ну смысла сильно распинатся о ней не вижу... Ибо ее автор --> andydam, точно такой же как у poedCrack GUI... разница в том, что если к poedCrack он выпустил только графическую оболочку, то в AppCrack он приложил руку еще и к скрипту... хотя тоже лишь от части -> Автор CLI версии AppCrack - MadHouse.
Сам интерфейс - по классу эконом. До выхода второй беты были страшные проблемы с отображением программ, но сейчас их вроде как и пофиксили.

Найти deb пакет GUI версии вы можете в нашем репозитории.

CLI версия
Скрипт написаный MadHouse, внешне ничем не отличается от poedCrack... вообще по секрету они практически не отличаются - только вот AppCrack в отличии от детища poedGirl не может работать с Fat Binnary, по этому довольно неважно взламывает новые и большие приложения... Но коль пошла такая пьянка, то упомянем и про этот скрипт.
1)Скачиваем
2)Перетаскиваем в /usr/bin/
3)Ставим права 777

Команда:
AppCrack %App_name% %user_name%


Пример:
AppCrack RunCocos2D Comb


Зависимости


[HR="1"][/HR]
AppBox

[HR="1"][/HR]
Замена Instal0us'а... Уже интересно? В принципе да, логически предположим что коли это замена Install0us'а, то и Craculous под нее тоже попадет? Кто знает... если судить о перспективах программы сейчас, то бушующее у нее определенно есть... Но явно не по тому что он лучше взламывает - а по тому что это несколько программ в одной. За основу Крака в ней взят немного дописанный скрипт AppCrack. Плюшка? Нет. Симбеоз - AppBox есть вторая попытка AppCrack'а придти на замену Crackulous'у. В первый раз когда Crackulous приостановился в развитии, это не вышло, помешал Install0us... Сейчас когда Install0us прекратил развиваться, почему бы не попытаться забрать его лавры себе? Шансы есть, осталось лишь найти желание разработчиков... Внедрить в AppBox Updatr, дабы возместить то чего все ждали от Install0us 3.0, и продолжать развивать AppCrack в сторону новых систем DRMv0.7 и Fat Binnary.
Ну чтож будем ждать и уповать на обновления.

Скачать deb пакет можно из нашего репо... вот только не утомитесь с зависимостями...
Во первых AppBox нуждается во всех пакетах Install0us'а...
А во вторых сам скрипт для кряка нуждается еще и в своих:
И итого у нас получается нехилый списочек:

  • Erica Utilities
  • Darwin CC Tools
  • GNU Debugger
  • Core Utilities
  • gawk
  • APT 0.6 Transitional
  • SQLite 3.x
  • SQLite 3.x Libraries
  • zip
  • unzip
  • UUID Generator
  • OpenSSL
  • cURL
  • sed

[HR="1"][/HR]
DeCript (IDCrack)
[HR="1"][/HR]
Оооо да... Куда же мы без OpenSource скрипта, следующий метод для или просто любопытных, или ТрутЪ Хакеров.
Во первых, этот способ не требует каких либо конкретных программ, т.е. так можно взламывать даже на S_Light Custom'ах.
Во вторых, в этом способе открытый код - можете сами его поправить или дописать.

Для взлома нужны пакеты:
  • com.ericasadun.utilities
  • gdb
  • gawk
  • zip
  • ldid
  • odcctools

Взлом делается в два шага:
1)Найти программу
find /var/mobile/Applications/ -iname *.app


2)Взломать программу.
./DCrypt.sh "Monkey Ball"


Как вы уже видите будет использоваться скрипт DCript.sh
DCript.sh


Используя этот метод можно отдельно сохранить IDCrypt используя примочку - AppExec, который так же можно сжать используя AdHoc Helper

AdHoc Helper


[HR="1"][/HR]
Советы мастеров

[HR="1"][/HR]

Совет №1
Вставляем картинку с лого
Как я думаю все знают, есть три типа людей:
Первые - Хакеры, на белых конях, которые покупают программы и взламывают их для всех...
Вторые - Пользователи, просто любят Хакеров, за все счастье, что они принесли. И этой благодарности Хакерам хватает.
Третьи - Комунисты... которые просто перекидывают чужие крями с ресурса на ресурс... Но это конечно не значит, что они поголовно "просто_не_хорошие_люди", большенство из них - просто распространяют труды хакеров.... но ведь есть и те кто хотят себе кусок пирога...
Лично я считаю долгом защищать приложения от них. Как правило такие люди не важно знакомы с понятием взлома, и архитектурой IPA, по этому самая элементарная защита - уже хорошо. Мы например будем использовать картинку.
Все предельно просто - перед тем как взламывать приложение, вам надо найти в его рабочей папке (//va/mobile/****-****-****-****/%Application%.app/) картинку которая используется при загрузке, и отредактировать ее.

Важно:
-Редактировать необходимо на компьютере.
-Изменять размер изображения нельзя.
-Нельзя нарушать альфа канал PNG (прозрачность)

Чтобы всего этого избежать советую использовать Photoshop или тем кто не особо с ним дружит - Paint.NET. Т.е. в графическом редакторе мы просто открываем ниже приведенное лого как новый слой изображения. Смотрим как выглядит, при необходимости стираем какие-либо детали на оригинале. Сливаем слои. Сохраняем в том же формате в каком было оригинальное изображение (Глубину цвета ставим на Авто, порог прозрачности - 128)
При особой необходимости используем программу iphonePNG.

Лого iGuides


Совет №2
Побеждаем всплывающие окна.
Всплывающие окна стали весьма не хилой защитой в приложениях... например все помнят Comic Reader Mobi который очень долго никому не удавалось победить... все дело было в постоянно всплывающем окне, что версия - пиратская. Как ее тольео люди не пытались бить... и вырывали целые куски кода, что приводило к тому что программа работала ровно 10-15 минут, удаляли окошечко - теперь оно не мешало читать, но вот управление все равно отключалось...
Но способы есть. Для начала поймем суть проблемы - UDID (Unique Device IDentifier)- Уникальный Идентификационный Номер Устройства. Суть в том что программа отправляет его на свой сервер чтобы проверить, а покупали ли программу с этого устройства? И если на сервере нет записи об этой покупке - дяденька, идите лесом.
Но, почему бы тогда не сообщать серверу "Правильный ID"?
Тут есть одна преграда. Обходить ее или нет - дело самого Хакера. А наше дело объяснить как это сделать.
1) Необходимо узнать свой ID, т.е. тот с которого была совершена покупка. Но не забываем что ID - номер устройства. А покупка производится с учетной записи, которая не привязана к девайсу. Вариант, что UDID попадает на сервер разработчика при покупке отпадает: при покупке нет никакой возможности угадать на какой девайс будет установлена программа, и узнать его UDID невозможно. Кроме того по пользовательскому соглашению приватности Apple не имеет права передавать какую-либо информацию разработчикам. Это уже очень хорошо! Просто поверте на слово, что это очень хорошо...
2)Раз первый вариант отпал, остается только второй - UDID попадает к разработчику при первом включении программы. А это воовсе замечательно!

Теперь правда немного о том как мы будем обманывать. тут нам поможет программа из Сидии UDIDFaker, кажись лежала в Репозитории Саурика. Суть ее в том что она позволяет менять UDID для определенной программы, т.е. перехватывает запрос программы и отвечает тем идентификатором, который ввел пользователь. Итого: мы можем менять UDID для любой программы, т.е. мы можем отправить на сервер любой ID номер какой захотим. И при этом будем его знать... Ну а коли мы знаем какой UDID считается у разработчика лицензионным, что нам мешает сообщать его же, но уже с другого устройства? Ну думаю первичный смысл всем понятен:
-Заменил UDID.
-Включил программу, дабы она отослала запрос на сервер.
-Взломал CryptID, отвязал от Аккаунта.
-Установил на другой девайс
-Заменил UDID, на тот который использовался в первый раз.
-Включил программу, словил счастье.

А теперь о проблемах которые могут возникать:

Вариант №1 - UDID прописывается в файл CryptID, и стало быть на конечном устройстве UDIDFaker не нужен, он даже не будет спрашивать. НО все не так хорошо как казалось бы. Не забываем что CryptID удаляется в ходе отвязки от аккаунта, а значит программа отправит пустой запрос на сервер, и программа снова будет пиратской.
Выходи из проблемы - Использовать DCrypt настроенный чтобы не полностью удалять IDCrypt.

Вариант №2 - Вместе с UDID, на сервер отправляется ECID (просто другие идентификаторы отправлять - незаконно). А вот ECID уже подделать не удастся...

[admin="fox_sash"]
Ждем также советов наших "бывалых" релизеров ;)
Будем пополняться и развиваться!
[/admin]
Раздел: iOS Support Автор: JagdCrab
22 марта 2010, 17:56

Ответы