Amazon.co.jp

GAMES25
SSG uploader
GAMES24
FC2ブログ


games24con@yahoo.co.jp
前提
Homebrew 開発環境構築
1.2を完了した環境からの手順

インストール解説
Windouws10のUbuntuを起動する
/opt/devkitpro に移動
wget で devkitARM_r47-x86_64-linux.tar.bz2 を保存する
tar で 保存したdevkitARM_r47-x86_64-linux.tar.bz2を解凍する
環境パスを通す
DEVKITARM に $DEVKITPRO/devkitARM を登録
以前の処理でDEVKITPROには/opt/devkitproが登録されている

インストール手順
cd /opt/devkitpro
sudo wget https://github.com/devkitPro/buildscripts/releases/download/devkitARM_r47/devkitARM_r47-x86_64-linux.tar.bz2
sudo tar -xvjf devkitARM_r47-x86_64-linux.tar.bz2
sudo rm devkitARM_r47-x86_64-linux.tar.bz2
echo "export DEVKITARM=$DEVKITPRO/devkitARM" >> ~/.bashrc
source ~/.bashrc

ビルド方法
cd ~
git clone https://github.com/ktemkin/Atmosphere.git
cd Atmosphere/fusee
make

実行方法
Atmosphere/fusee/src/main.c を編集してから
Atmosphere/fusee/ でmake すると
Atmosphere/fusee/out/ に fusee.bin が作成される
このfusee.binを Switchで実行する
a.Windouws ならこの方法で実行する
b.UbuntuならUbuntu(仮想マシンではない)にコピーしてペイロード実行する

ソース
ディスプレイに文字列表示 呼び出し方はprintfと同じ
printk("00000000 %08x\n", 10);

押されてるボタン取得 戻り値に押されている値が返る
#include "hwinit/btn.h"
u32 res=btn_read();
#define BTN_POWER 0x1
#define BTN_VOL_DOWN 0x2
#define BTN_VOL_UP 0x4

スリープ 引数に渡したマイクロ秒だけsleepする
#include "hwinit/util.h"
sleep(1000000);//1秒スリープ

シャットダウン
#include "hwinit/max77620.h"
#define MAX77620_REG_ONOFFCNFG1 0x41
#define MAX77620_ONOFFCNFG1_PWR_OFF (1 << 1)
i2c_send_byte(I2C_5, 0x3C, MAX77620_REG_ONOFFCNFG1, MAX77620_ONOFFCNFG1_PWR_OFF);

リカバリモードで再起動
#define PMC_BASE 0x7000E400
#define APBDEV_PMC_SCRATCH0 0x50
#define _REG(base, off) *(vu32 *)((base) + (off))
#define PMC(off) _REG(PMC_BASE, off)
PMC(APBDEV_PMC_SCRATCH0) = 2; //Reboot into rcm.
PMC(0) |= 0x10;
while (1)
sleep(1);
Ubuntu18.04 LTS
python3.6.5 (Ubuntu18.04に元から入っている)

環境構築
Ubuntu18.04を新規インストール(仮想マシンではだめ)
python3.6.5を更新
gitインストール
setuptoolsモジュールインストール
usbモジュールインストール

ターミナルを起動する
最初に設定
sudo apt-get install python3 libusb-1.0-0-dev
sudo apt-get install python3-setuptools
sudo apt install git
cd ~
git clone https://github.com/walac/pyusb
cd pyusb/
sudo python3 setup.py install

ペイロード実行
cd ~
git clone https://github.com/reswitched/fusee-launcher.git
cd ~/fusee-launcher/
sudo wget https://misc.ktemkin.com/fusee.bin
sudo python3 ./fusee-launcher.py fusee.bin

DSC_0210.jpg

Screenshot from 2018-04-28 22-40-08


コード実行
SwitchをUSBでPCと接続しリカバリモードで起動する
~/fusee-launcher/ に実行するコードのbinファイルを配置して、
sudo python3 ./fusee-launcher.py binファイル
と実行する

ペイロード、Homebrew 開発環境構築
sudo apt install make
mkdir ~/tmpf
cd ~/tmpf
sudo wget https://raw.githubusercontent.com/devkitPro/installer/master/perl/devkitA64update.pl
sudo chmod +x ./devkitA64update.pl
sudo ./devkitA64update.pl
cd ..
sudo rm -r ~/tmpf
cd /opt/devkitpro
sudo wget https://github.com/devkitPro/buildscripts/releases/download/devkitARM_r47/devkitARM_r47-x86_64-linux.tar.bz2
sudo tar -xvjf devkitARM_r47-x86_64-linux.tar.bz2
sudo rm devkitARM_r47-x86_64-linux.tar.bz2
echo "export DEVKITPRO=/opt/devkitpro" >> ~/.bashrc
echo "export DEVKITARM=$DEVKITPRO/devkitARM" >> ~/.bashrc
source ~/.bashrc

ビルド方法
cd ~
git clone https://github.com/ktemkin/Atmosphere.git
cd Atmosphere/fusee
make

実行
cp ~/Atmosphere/fusee/out/fusee.bin ~/fusee-launcher
cd ~/fusee-launcher
sudo python3 fusee-launcher.py fusee.bin



Ubuntu16.04での方法
python3.5

環境構築
Ubuntu16.04を新規インストール(仮想マシンではだめ)
python3.5を更新
gitインストール
setuptoolsモジュールインストール
usbモジュールインストール

ターミナルを起動する
最初に設定
sudo apt-get install python3 libusb-1.0-0-dev
sudo apt install git
sudo mkdir ~/a
cd ~/a
sudo wget https://bootstrap.pypa.io/ez_setup.py
sudo python3 ez_setup.py
cd ~
git clone https://github.com/walac/pyusb
cd pyusb/
sudo python3 setup.py install

ペイロード実行
cd ~
git clone https://github.com/reswitched/fusee-launcher.git
cd ~/fusee-launcher/
sudo curl https://misc.ktemkin.com/fusee.bin -O
sudo python3 ./fusee-launcher.py fusee.bin

コード実行
SwitchをUSBでPCと接続しリカバリモードで起動する
~/fusee-launcher/ に実行するコードのbinファイルを配置して、
sudo python3 ./fusee-launcher.py binファイル
と実行する




UbuntuUsbインストールメディア作成ツール
unetbootin-windows-661.exe



cd ~/Atmosphere/fusee
make
cp ~/Atmosphere/fusee/out/fusee.bin ~/fusee-launcher
cd ~/fusee-launcher
sudo python3 fusee-launcher.py fusee.bin
sudo vi ~/Atmosphere/fusee/src/main.c


git clone https://github.com/nwert/hekate.git
リカバリモードの脆弱性
SwitchのUSBリカバリモードには、イメージを読み込む際に脆弱性が存在する
この脆弱性はFWアップデートでは対策することができず、
対策するにはハードウェアの変更が必要


リカバリモード起動方法
リカバリモードへ入る方法は、いくつかある
a.Switch本体の10Pinと1Pin(または7Pin)をショートさせ、本体のボリュームアップ、電源ボタンを同時に押し、
起動させるとリカバリモードに入る
b.Switchのカーネルモードコードを実行して入る
c.eMMCが取り外されていた場合、Tegraはブート時にリカバリモードに入る

a.の手順
1pin10pin.png
右側のジョイコンのコネクタ部分の下にある
両端の1Pin、10Pinをジャンプワイヤでショートさせる

syoto.jpg

PCとSwitchをUsbType-CケーブルまたはSwitchProコン付属Usbケーブルで接続する
Switchの電源を落とす
Switch本体のボリュームアップ、電源ボタンを同時に押し、
起動させる
または、Switchの電源メニューからボリュームアップを押しながら再起動をする

douzi.png

リカバリモードの起動に成功すると、
Switchの画面は暗いまま、何も表示されない
デバイスマネージャーにAPXと表示される

APX.png


起動に失敗している場合
通常通りSwitchのロゴが表示され、ホーム画面が表示される

リカバリモードは電源長押しで終了できる。

HiLetgo® 140pcsジャンプワイヤキット SKS-140 単線タイプ ハンダ付けなし ブレッドボード ジャンパーワイヤ ジャンパーケーブル DIY キットボックス Arduinoに対応


UsbType-Cケーブル



https://fail0verflow.com/blog/2018/shofel2/
https://github.com/Atmosphere-NX/Atmosphere
Windows10 1803
16299.248
Ubuntu 18.04 LTS

2020/04/27
ファイルパス修正

インストール解説
Ubuntu環境でdevkitpro-pacman.debをインストール
/etc/pacman.conf を作成し、サーバーを入力する
pacman -S switch-dev を入力
エンターを押しYと入力
switch開発環境が構築される
/opt/devkitpro/ にフォルダが作成される
環境パスを通す
DEVKITPROに/opt/devkitproを登録
git clone でswitch の最新のライブラリ libnx をダウンロードする
Makefileを編集してmakeする

インストール手順
1.
windows10 で Ubuntu環境構築

Ubuntu環境構築 のためにWSLを有効にする。
スタートボタンを右クリック
Windows PowerShell(管理者)
をクリック

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

と入力しエンターキーを押す。
Windows10を再起動

Microsoft Store を開く
検索に ubuntu と入力 Ubuntu 18.04 をインストールする
インストール完了後
Windowsキー+R を押す
ubuntu1804
と入力しエンターキーを押す。
ユーザー名とパスワードを作成する

2.
Switch 開発環境構築

ubuntu で以下のコマンドを入力
最初のsudo 実行時にパスワードを求められるのでパスワードを入力する

sudo su
curl -L https://github.com/devkitPro/pacman/releases/download/devkitpro-pacman-1.0.1/devkitpro-pacman.deb -o devkitpro-pacman.deb
dpkg -i devkitpro-pacman.deb
rm devkitpro-pacman.deb
echo "PATH="$PATH:/opt/devkitpro/pacman/bin"" >> ~/.bashrc
echo "export DEVKITPRO=/opt/devkitpro" >> ~/.bashrc
source ~/.bashrc
pacman-key --init

vim /etc/pacman.conf

[dkp-libs]
Server = http://downloads.devkitpro.org/packages
[dkp-linux]
Server = http://downloads.devkitpro.org/packages/linux

pacman -Syu
pacman-key --recv F7FD5492264BB9D0
pacman-key --lsign F7FD5492264BB9D0

ln -s /proc/self/mounts /etc/mtab
pacman -U https://downloads.devkitpro.org/devkitpro-keyring-r1.787e015-2-any.pkg.tar.xz
pacman -S switch-dev

apt install make

git clone https://github.com/switchbrew/libnx.git
cd libnx
make
cp -r nx/lib /opt/devkitpro/libnx/
cp -r nx/include /opt/devkitpro/libnx/
cd ..
rm -r libnx

git clone https://github.com/Atmosphere-NX/Atmosphere.git
cd Atmosphere/libraries/libstratosphere/
make
cp -r lib /opt/devkitpro/libnx/
cp -r include /opt/devkitpro/libnx/


Ubuntuのデータのパス
%localappdata%\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows....\LocalState\rootfs\home\

Windowsの環境変数をUbuntuに引き継ぐ
WindouwsでWSLENVという環境変数を作成し値をセットする
引き継ぐ環境変数を:で区切る
USERPROFILEとHOMEPATHを引き継ぐ例

システム環境変数に追加または上書き 管理者権限が必要
setx WSLENV USERPROFILE/p:HOMEPATH/p -m

ユーザー環境変数に追加または上書き
setx WSLENV USERPROFILE/p:HOMEPATH/p

Ubuntuで実行するとWindowsのホームディレクトリに飛ぶ
cd $USERPROFILE


setx ds D:\source
setx WSLENV USERPROFILE/p:HOMEPATH/p:ds/p

svc.s

SVC_BEGIN svcSetHardwareBreakPoint
svc 0x6C
ret
SVC_END

svc.h

///@name ( ͡° ͜ʖ ͡°) tuika
///@{

/**
* @brief
* @param
* @return Return value
* @note Syscall number 0x6C.
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
*/
Result svcSetHardwareBreakPoint(u32 hardware_breakpoint_id,u64 flags,u64 value);

///@}


サービス呼び出し
http://switchbrew.org/index.php?title=Services_API

Loader services の UnregisterTitle を呼び出す

Service srv;
//r = smGetService(&srv, "hid:sys");
Result r = smGetService(&srv, "ldr:pm");//サービス取得

IpcCommand c;//
ipcInitialize(&c);//初期化

struct as{
u64 magic;
u64 cmd_id;
u64 index;
} *raw;//定義

raw = (as*)ipcPrepareHeader(&c, sizeof(*raw));//raw 取得

//raw 編集
raw->magic = SFCI_MAGIC;
raw->cmd_id = 3;//UnregisterTitle
raw->index = 0x12345678;

r = serviceIpcDispatch(&srv);//送る


//シャットダウン
Service srv;
smGetService(&srv, "bpc");//サービス取得

IpcCommand c;//
ipcInitialize(&c);//初期化

struct as {
u64 magic;
u64 cmd_id;
} *raw;//定義

raw = (as*)ipcPrepareHeader(&c, sizeof(*raw));//raw 取得
raw->magic = SFCI_MAGIC;
raw->cmd_id = 0;//ShutdownSystem
serviceIpcDispatch(&srv);//シャットダウン開始



ida pro 7
https://github.com/reswitched/loaders
ダウンロード
requirements.txt を c:\python27-x64\ にコピー
nxo64.py を C:\Program Files\IDA 7.0\loaders\ にコピー

cd c:\python27-x64
python -m pip install -r requirements.txt

idapro で mainを開く


逆アセンブル armv8
sudo apt install binutils-aarch64-linux-gnu
aarch64-linux-gnu-objdump -D -b binary -m aarch64 01005D100807A000_code.bin



















Windows10 1709
16299.248
Ubuntu 16.04.3 LTS

インストール解説
Ubuntu環境でdevkitA64update.plをDLして実行すると
/opt/ に devkitpro フォルダが作成される
環境パスを通す
DEVKITPROに/opt/devkitproを登録

インストール手順
1.
windows10 で Ubuntu環境構築

Ubuntu環境構築 のためにWSLを有効にする。
スタートボタンを右クリック
Windows PowerShell(管理者)
をクリック

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

と入力しエンターキーを押す。
Windows10を再起動

Microsoft Store を開く
検索に ubuntu と入力
Ubuntu をインストールする
インストール完了後
Windowsキー+R を押す
ubuntu
と入力しエンターキーを押す。
ユーザー名とパスワードを作成する

2.
Switch 開発環境構築

ubuntu で以下のコマンドを入力
最初のsudo 実行時にパスワードを求められるのでパスワードを入力する

sudo apt install make
mkdir ~/tmpf
cd ~/tmpf
sudo curl -L https://raw.githubusercontent.com/devkitPro/installer/master/perl/devkitA64update.pl -o devkitA64update.pl
sudo chmod +x ./devkitA64update.pl
sudo ./devkitA64update.pl
cd ..
sudo rm -r ~/tmpf
echo "export DEVKITPRO=/opt/devkitpro" >> ~/.bashrc
source ~/.bashrc

3.
プロジェクト作成

ubuntu上で開発するなら
mkdir ~/projects
cp -r /opt/devkitpro/examples/switch/templates/application ~/projects/test1

Windows上でビジュアルスタジオなどで開発するなら
cp -r /opt/devkitPro/examples/switch/templates/application /mnt/c/Users/ユーザー名に書き換える/Documents/test1

4.
ソースコード編集

ubuntu上で開発するなら
cd ~/projects/test1/source/
vim main.c

Windows上でvisual studioなどで開発するなら
c:\Users\ユーザー名に書き換える\Documents\test1\application\source\main.c
をエディタで編集する

5.
ビルド

Ubuntuで編集した場合
cd ~/projects/test1
make

Windows上で編集したのなら
cd /mnt/c/Users/ユーザー名に書き換える/Documents/test1/
make

test1フォルダに
test1.nroが作成される

6.
Switch 実機で動作確認

MicroSDカードのswitch/に
test1.nro
を配置する

Windows側からUbuntuのファイルを編集するなら下のパスを見ればいい
※Windows側からUbuntuのファイルを削除するとUbuntu側のファイル構成がバグるのでしてはいけない。
C:\Users\ユーザー名に書き換える\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\ubuntu側ユーザー名\

ファイル名を main.c から main.cpp
に変更して make すると c++ でコンパイルできる

Ubuntuコマンド
Ubuntuバージョン確認
cat /etc/issue
ファイル削除
rm temp.txt
ディレクトリ削除
rm -rf temp/
バイナリ表示16進 1byte毎に区切る
od -tx1z -w16 -Ax -v file.bin
ターミナル入力履歴削除 一時的
history -c

ターミナル入力履歴削除
cd ~
vi .bash_history

ddで削除
:wqで保存

ftp ログイン処理省略
echo machine wwwサーバ名.jp >>~/.netrc
echo login ユーザ名 >>~/.netrc
echo password パスワード >>~/.netrc
touch ~/.netrc
chmod 600 ~/.netrc

ftp wwwサーバ名.jp

上書き保存
wget -r http://www13.plala.or.jp/baharasan/fusee.bin

Windowsの環境変数をUbuntuに引き継ぐ
WindouwsでWSLENVという環境変数を作成し値をセットする
引き継ぐ環境変数を:で区切る
USERPROFILEとHOMEPATHを引き継ぐ例

システム環境変数に追加または上書き 管理者権限が必要
setx WSLENV USERPROFILE/p:HOMEPATH/p -m

ユーザー環境変数に追加または上書き
setx WSLENV USERPROFILE/p:HOMEPATH/p

Ubuntuで実行するとWindowsのホームディレクトリに飛ぶ
cd $USERPROFILE

ver11.3

Luma3DSv6.6
https://github.com/AuroraWright/Luma3DS/releases

arm9loaderhax.bin SDのルートにコピー

BootNTRSelector-FONZD-Banner.cia
https://filetrip.net/dl?lAMlFxYNSA

BootNTRSelector-FONZD-Banner.cia
SDにコピー
3DSのFBIからインストール

NTR起動方法
USE Defalt を選択
SAVE... を選択
アップデート

再度起動、3.4を選択