google-code-prettify

星期四, 9月 15, 2022

【Python】將 Python Script 編譯成 執行檔(Executable File)

 口白:

流動的水沒有形狀,漂流的風找不到蹤跡,任何案件的 Coding 都取決於心
唯一看透真相的是,外表看似卜朧共,智慧卻低於常人的 名卜朧共 刻爛
(謎之音:把 Code 刻到爛簡稱刻爛.爛..爛...)
Music:
#表升半音 []表高八度
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 5 4 3 4 2 6 4 5 [2] [1] #6 6 5 6
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 4 3 2 4 2 6 4 5 [2] #6 6 5 6
口白:
刻爛:真実はいつも一つ!

環境:
Linux Mint 下使用 Python 3.8.10
Windows X下使用 Python 3.10 .6

狀況:
將 .Py 的 Python Script 編譯成 執行檔(Executable File)

要如何實做?問問谷哥吧…沒有谷哥罩…我就廢了…
以下就以 MS Windows X 的環境進行吧

流程:
1. 安裝 軟體
1.1 PYTHON3.X
1.2 chrome
2. 更新 與 安裝 Python 的套件
2.1 編譯執行檔需要的套件
2.2 專案需要的套件
3. Python Script 編譯成 執行檔(Executable File)

參考文獻:

那我們開始吧...
1. 安裝 軟體
     去官網下載並安裝軟體吧
1.1 PYTHON3.X
安裝吧,就讓我們向那些寫書的大師致敬
(謎之音:你就懶吧…光安裝就佔了三分之一篇幅)

選擇自訂安裝
就裝想裝的東西吧
基本要裝有 pip ...如果不喜歡 notepad 那就裝 IDLE 開發工具吧

必勾選 將 Python 加入環境變數
(目的是可以在 MSDOS Command line 下執行 Python)

Python 安裝完成

1.2 chrome
要谷哥罩...必裝
安裝 Chrome

2. 更新 與 安裝 Python 的套件
用下列指令安裝需要的套件

2.1 編譯執行檔需要的套件
py -m pip install --upgrade pip
py -m pip install --upgrade pyinstaller
py -m pip install --upgrade auto-py-to-exe

2.2 專案需要的套件
py -m pip install --upgrade matplotlib
py -m pip install --upgrade ezdxf

用檔案總管 在 Python 專案目錄下,路徑列中下 cmd 開啟命令提示字元

命令提示字元 開啟囉

裝裝裝...



(謎之音:你再懶吧…)

3. Python Script 編譯成 執行檔(Executable File)

使用 auto-py-to-exe ,在命令提示字元下 輸入auto-py-to-exe
它將會使用 Chrome 來開啟,這就是為什麼要裝它了

使用參數 --hidden-import 加入專案需要的套件
(我第一次編譯出錯,再把出錯的套件加入)

可輸出成單檔,CLI 程式
並產生編譯指令
(謎之音:就是懶的打字吧…)

編譯中...

編譯完成...

完...
(未完待續)



星期四, 7月 14, 2022

星期五, 2月 14, 2020

【GIS】MapWinGIS ocx 建置

口白:
流動的水沒有形狀,漂流的風找不到蹤跡,任何案件的 Coding 都取決於心
唯一看透真相的是,外表看似卜朧共,智慧卻低於常人的 名卜朧共 刻爛
(謎之音:把 Code 刻到爛簡稱刻爛.爛..爛...)
Music:
#表升半音 []表高八度
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 5 4 3 4 2 6 4 5 [2] [1] #6 6 5 6
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 4 3 2 4 2 6 4 5 [2] #6 6 5 6
口白:
刻爛:真実はいつも一つ!

流程主軸:
1. 下載檔案( MapWinGIS V5.1.1、gdal and mapserver 需選擇對應開發工具及版本)
2. 環境說明
2.1 基礎環境
2.2 必要安裝
3. 原碼編譯
3.1 解壓縮
3.2 編譯 SupportLibs
3.3 編譯 MapWinGIS

1. 下載檔案
下載 MapWinGIS V5.1.1


下載  GDAL and Mapserver
有分 64bit  or 32bit  版本並且有對應開發工具 MSVC 2017 與 MSVC 2015 等等版本,
依據開發工具對應下載吧

使用 VS2015
release-1900-gdal-2-4-2-mapserver-7-4-0.zip、
release-1900-gdal-2-4-2-mapserver-7-4-0-libs.zip
使用 VS2017、VS2019(2017 老子不爽裝,2019 硬幹啦)
release-1911-gdal-2-4-2-mapserver-7-4-0.zip、
release-1911-gdal-2-4-2-mapserver-7-4-0-libs.zip
(有很多對應版本,只測成功過VS2015 x86 對 1900;VS2019 對 1911)

在 [Tutorial] Compiling MWGis in VS2017 有說了一段話
所以,只測過 32bit 版本囉(謎之音:有病嗎?頻寬很多嗎?抓那麼多檔案是有收集癖)

2. 環境說明
2.1 基礎環境
作業系統:Windows 10 64Bit
開發工具:Microsoft Visual Studio Enterprise 2019
2.2 必要安裝
安裝完 Visual Studio 2019 後,使用 Visual Studio Installer 安裝環境
需要安裝 【.NET 桌面開發】
【使用 C++ 的桌面開發】 需要 v142 建置工具的 C++ MFC(x86 & x64...)
【使用 C++ 的桌面開發】 需要 Windows 10 SDK (10.0.17...)

3. 原碼編譯
3.1 解壓縮
分別解壓縮兩個壓縮檔
release-1900-gdal-2-4-2-mapserver-7-4-0.zip
release-1900-gdal-2-4-2-mapserver-7-4-0-libs.zip

release-1911-gdal-2-4-2-mapserver-7-4-0.zip
release-1911-gdal-2-4-2-mapserver-7-4-0-libs.zip

Visual Studio 2015 對的版本號是 v140( MapWinGIS-4.9.3.6编译方法 ) ;
Visual Studio 2017 對的版本號是 v141( youtube 上是這樣教的);
Visual Studio 2019 對的版本號是 v142(嘗試把v142目錄建立起來,編譯是成功的)
將 release-1900-gdal-2-4-2-mapserver-7-4-0 壓說檔內的 bin 資料夾的檔案複製到
MapWinGIS-5.1.1.1\support\GDAL_SDK\v140\bin\win32\ 資料夾中



將 release-1900-gdal-2-4-2-mapserver-7-4-0-libs 壓說檔內
include 資料夾的檔案複製到
MapWinGIS-5.1.1.1\support\GDAL_SDK\v142\include\win32\ 資料夾中

lib 資料夾的檔案複製到
MapWinGIS-5.1.1.1\support\GDAL_SDK\v142\lib\win32\ 資料夾中


3.2 編譯 SupportLibs
以管理員身份使用 VS2019 打開 MapWinGIS-5.1.1.1\support\ 資料夾裡的 SupportLibs.sln
編譯 cqlib.lib 和 spatialindex-mw.lib

在【解決方案】上,按右鍵  打開【屬性】 設定界面,將【通用屬性】中的【起始專案】
改成多個啟始專案

在【解決方案】上,點選它,然後點選【屬性】頁籤,
將【使用中的組態】的屬性改成 Release|Win32

完成以上設定後,就可以按下 F6  來建置方案
建置完成就會產生 spatialindex-mw.lib、cqlib.lib

3.3 編譯 MapWinGIS
以管理員身份使用 VS2019 打開 MapWinGIS-5.1.1.1\src 資料夾裡的 MapWinGIS.sln
修改 AngleHelper.cpp 檔案

s.Format(format + L"?, angle); //L"%.1f?
改成
s.Format(format + L"%.1f", angle); //L"%.1f?

接下來就可以建置它囉
完成後會產出 MapWinGIS.ocx

建置是成功了能不能用不知道啦
下次搭配 MapWindow 試看看好了
下回可能跟冨樫 yoshirin 的獵人一樣不知何時才會有下ㄧ回不要期待吧

                                                                                                                                                 (未完待續…)

參考文獻:
【Github】MapWinGIS v5.1.1
GDAL and MapServer Older Releases
【Blog】MapWinGIS-4.9.3.6编译方法
[Tutorial] Compiling MWGis in VS2017
【Youtube】Compiling MWGis in VS2017






星期六, 11月 09, 2019

【EF】EntityFrameworkCore 存取空間資料 Geometry 欄位…私、失敗しないので(我,絕對不會失敗)

劇情講述的是:
直言敢諫的派遣工 EntityFrameworkCore,討厭結群、討厭權力、討厭束縛,以其專業以及高超的技術作為武器,勇於挑戰白色巨塔封建體系的故事。

不需要資料庫的事情 EntityFrameworkCore 一律不做,
像是幫教授寫論文… いたしません(不幹)、
參加院長巡房… いたしません(不幹)、
配合掩護小三等等全都… いたしません(不幹),
且一定要準時下班,若要額外加班、要另外收高額費用…

自從 EntityFramework 誕生,也過了好幾個年頭…

維基百科:
Entity Framework (又稱ADO.NET Entity Framework)
是微軟以 ADO.NET 為基礎所發展出來的物件關聯對應 (O/R Mapping) 解決方案,
早期被稱為 ObjectSpace,
ADO.NET Entity Framework 以 Entity Data Model (EDM) 為主,
將資料邏輯層切分為三塊,
分別為 Conceptual Schema, Mapping Schema 與 Storage Schema 三層,
其上還有 Entity Client,Object Context 以及 LINQ 可以使用。

第一版 發行日期:2008-8-11 Entity Framework (EFv1) 包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中發表。
第二版 發行日期:2010-4-12 名為:Entity Framework 4.0 (EFv4) 。
第三版 發行日期:2011-4-12 名為:Entity Framework 4.1  開始支援 Code First。
…  光陰似箭,歲月如梭 …(謎之音:偷懶…)
第6版 發行日期:2013-10-17

微軟隨後決定對 .NET 跨平台化,並將其引入Linux,OSX和其他地方,
這意味著 Entity Framework 的下一個版本將被完全重寫。
2016-6-27 作為 Entity Framework Core 1.0 與 ASP.NET Core 1.0 和.NET Core 1.0 發布。
它最初命名為Entity Framework 7,但經過重命名以強調它是完全重寫而不是增量升級,並且不替代EF6。

2017-8-14 發布 EF Core 2.0、Visual Studio 2017 15.3、ASP.NET Core 2.0
2019-9-23 發佈 EF Core 3.0、Visual Studio 2019 16.3、ASP.NET Core 3.0

如何讓 EF Core 讀取 Geometry or Geography?
NetFramework 4.7.2,.NetCore 2.0,.NetStarndard 2.0:
===================================================================
Step 0: 專案檔修改
修改 .csproj,使其支援 .NetFramework、.NetCore、.NetStarndard多個版本框架,
netstandard 要放在最後面,不然會說沒有 runtime,無法執行
修改範例如下:
<TargetFrameworks>net472;netcoreapp2.0;netstandard2.0;</TargetFrameworks>

Step 1: 需先從Nuget安裝 or 用 PackageManager 下指令安裝
Nuget安裝 要對應 EF Core 2.0 使用的版本套件
1.Microsoft.EntityFrameworkCore
2.Microsoft.EntityFrameworkCore.Design
3.Microsoft.EntityFrameworkCore.SqlServer
4.Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite
5.Microsoft.EntityFrameworkCore.Tools
6.NetTopologySuite
7.NetTopologySuite.Core

用 PackageManager 下指令安裝:
打開套件管理員主控台:Visual Studio → 工具 → NuGet套件管理員 → 套件管理員主控台
PM> Install-Package Microsoft.EntityFrameworkCore -Version 2.2.6
PM> Install-Package Microsoft.EntityFrameworkCore.Design -Version 2.2.6
PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 2.2.6
PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite -Version 2.2.6
PM> Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.2.6
PM> Install-Package NetTopologySuite -Version 1.15.3
PM> Install-Package NetTopologySuite.Core -Version 1.15.3

Step 2: 將目錄移到有 .csproj 檔案的目錄位置
打開套件管理員主控台:Visual Studio → 工具 → NuGet套件管理員 → 套件管理員主控台
輸入
PM> ls 指令 (好親切…微軟 UNIX/Linux 化…)
PM> cd 指令將目錄移到有 .csproj 檔案的目錄位置

Step 3:(只需做一次)
"dotnet ef" 必須安裝為全域或本機工具。 大部分的開發人員會使用下列命令,以全域工具的形式安裝 dotnet ef:
打開套件管理員主控台:Visual Studio → 工具 → NuGet套件管理員 → 套件管理員主控台
PM> dotnet tool install --global dotnet-ef --version 3.0.0
(就是裝最新版…就是可以用咧…)

Step 4:由資料庫反向工程,產生資料庫存取類別庫
PM> dotnet ef dbcontext scaffold "Data Source=伺服器;Initial Catalog=資料庫;User ID=填帳號;Password=填密碼;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" Microsoft.EntityFrameworkCore.SqlServer -d -f -o 輸出目錄

這樣就搞定囉

.NetCore 3.0,.NetStarndard 2.1:
===================================================================
Step 0: 專案檔修改
修改 .csproj,使其支援 .NetFramework、.NetCore、.NetStarndard多個版本框架,
netstandard 要放在最後面,不然會說沒有 runtime,無法執行
修改範例如下:
<TargetFrameworks>netcoreapp3.0;netstandard2.1;</TargetFrameworks>

Step 1: 需先從Nuget安裝 or 用 PackageManager 下指令安裝
Nuget安裝 要對應 EF Core 2.0 使用的版本套件
1.Microsoft.EntityFrameworkCore
2.Microsoft.EntityFrameworkCore.Design
3.Microsoft.EntityFrameworkCore.SqlServer
4.Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite
5.Microsoft.EntityFrameworkCore.Tools
6.NetTopologySuite

用 PackageManager 下指令安裝:
打開套件管理員主控台:Visual Studio → 工具 → NuGet套件管理員 → 套件管理員主控台
PM> Install-Package Microsoft.EntityFrameworkCore -Version 3.0.0
PM> Install-Package Microsoft.EntityFrameworkCore.Design -Version 3.0.0
PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 3.0.0
PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite -Version 3.0.0
PM> Install-Package Microsoft.EntityFrameworkCore.Tools -Version 3.0.0
PM> Install-Package NetTopologySuite -Version 2.0.0

Step 2: 將目錄移到有 .csproj 檔案的目錄位置
打開套件管理員主控台:Visual Studio → 工具 → NuGet套件管理員 → 套件管理員主控台
輸入
PM> ls 指令 (好親切…微軟 UNIX/Linux 化…)
PM> cd 指令將目錄移到有 .csproj 檔案的目錄位置

Step 3:(只需做一次)
"dotnet ef" 必須安裝為全域或本機工具。 大部分的開發人員會使用下列命令,以全域工具的形式安裝 dotnet ef:
打開套件管理員主控台:Visual Studio → 工具 → NuGet套件管理員 → 套件管理員主控台
PM> dotnet tool install --global dotnet-ef --version 3.0.0
(謎之音:你除了會複製貼上…你還會啥)

Step 4:由資料庫反向工程,產生資料庫存取類別庫
PM> dotnet ef dbcontext scaffold "Data Source=伺服器;Initial Catalog=資料庫;User ID=填帳號;Password=填密碼;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" Microsoft.EntityFrameworkCore.SqlServer -d -f -o 輸出目錄

這樣就搞定囉…
就會產生 包含 Geometry or Geography 類別囉

接下來怎麼用…小愛同學努力了解中…

未完待續…

【參考文獻】
維基百科 中文 Entity_Framework
維基百科 英文 Entity_Framework
微軟繁中 空間資料
微軟英文 空間資料
安裝 Entity Framework Core
.NET standard
Spatial Mapping with NetTopologySuite
NetTopologySuite: InvalidOperationException #18172
Finding Nearby Users with Entity Framework Core Spatial Data
Entity Framework Core support for SQL Spatial Data Types - DBGeography?


星期三, 10月 02, 2019

【Android】Re:從零開始的異世界 Sony Z5 (E6653) 尋根 生活(ROOT)


怒濤般的一日(怒涛の一日目)
身為家裏蹲的少年菜月昴,在從便利商店回家途中突然發生意外被傳送到異世界。
少年原以為自己完全沒有任何特長。
但本來應該因為遭遇襲擊死去,回過神來後一切卻都被重置。
發現自己「死亡回歸」的特殊能力後,為了拯救少女,少年跨越無數次絕望,一次次地死亡並重新來過。
刷機的過程就像是不斷「死亡回歸」,只為了成為寶可夢大師…

欲練神功…揮刀自宮…(謎之音:想練神功就準備切機機)
練完神功…無需自宮…(謎之音:神功練好就不用切機機)

保證這篇沒有 雷姆、拉姆、愛蜜莉雅、帕克

環境:
Sony Z5 (E6653) 7.1.1 一枚
加入空軍自備 pc 一枚 (linux mint 18.x)
收集底下列出的工具、軟體、FTF刷機包

狀況:
自從【Android】Sony Z5 Compact 尋根之路(ROOT)與高級磚頭的生死對決
從軍以來,步兵卜朧共都是一步一腳印的攻城掠地,
但光陰似箭…炎炎夏日…雖已入秋…但一樣熱到靠北…
一直嚮往空軍在天上飛的自由自在…(謎之音:明明就是想在家吹涼涼…抓爽爽…)

為了成為像小智一樣的寶可夢大師
一個不安份的靈魂就此大爆發…


由左至右: Mi4i、Z5、RedMi note 3、Z5C(背後 iphone 11 Pro Max)



大綱:
1. 前製作業工具準備
2. 作業流程
2.01 取得基本資訊
2.02 下載 firmware
2.03 提取官方版本核心
2.04 Android 降版本
2.05 備份 TA
2.06 自製核心
2.07 Android 升版本
2.08 Unlock BootLoader
2.09 置換 自製核心 Boot Kernel
2.10 置換 TWRP Recovery
3. 參考文獻



前製作業工具準備:
【工具】



工具說明:
Android SDK Platform-Tools 主要用到的只有 adb、fastboot
Flashtool 用來刷機機
XperiFirm 用來抓取 FTF 檔案工具
FTF包 就是刷機包,可以透過 XperiFirm 抓取,再由 Flashtool 來打包
Iovyroot 與 Universal (Dirtycow-based) TA Backup v2 用來備份 TA 工具
rootkernel_v5.23 原廠核心重新包裝與修改工具 用來編譯修改 boot kernel
Team Win Recovery Project for Sony Xperia Z5 (Sumire) Recovery 工具
Unlock Bootloader Sony 原廠 Bootloader 解鎖鑰匙取得
SuperSU Root 或 Magisk 用來 root 機機 (這不說明了)

adb、fastboot 其實在 linux 上不用這麼麻煩,有 簡單取得 的方法

windows上也不用這麼麻煩…有先拜弄了迷你版的工具…
基本上 Sony 降版本,需要清除使用者資料,
用人話講,就是刷完降版,就跟全新手機狀態一樣
所以該備份的工作就去備份吧…

有個動作要先做,就是先開啟手機開發人員選項
開發人員選項目的有二,其一開啟  啟用 OEM 解鎖;另一則是開啟  USB 偵錯 

Z5 啟用後,接上 pc 後,Z5 會彈出 連線狀態選擇(充電、檔案傳輸、m啥鬼的)
我記得我選了檔案傳輸,Z5 接著會彈出 一個安全性確認的訊息,這時要選允許
這動作沒做,adb、flashboot 指令會無效

有個用 adb 備份的方式,在 LinuxMint 下操作指令如下
sudo adb devices
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
AB1C2DEFG3 device

(AB1C2DEFG3 看來出來這馬賽克加密處理過吧)
這步驟主要是,檢查是否已連接上
接著就可以用指令備份啦
sudo adb backup -apk -obb -shared -all -f ./backup_ApkObbSharedAll.ab


Backup and restore commands Description
backup[ -f file] -apk | -noapk] [-obb | -noobb] [-shared | -noshared] [-all] [-system | [-nosystem]package_names Write an archive of the device's data to file.
If you do not specify a file name, the default file is backup.adb.
The package list is optional when you specify the -all and -shared options. The following describes the usages for the other options:
-apk | -noapk: Back up or do not back up .apk files.
The default value is -noapk.
-obb | -noobb: Back up or do not back up .obb files.
The default value is -noobb.
-shared | -noshared: Back up or do not back up shared storage.
The default value is -noshared.
-all: Back up all installed apps.
-system | -nosystem: Include or do not include system apps when backing up all installed apps (-all).
The default value is -system.
參考來源:Android Debug Bridge (adb)


備份過程,Z5 會跳出備份檔案密碼設置提示,密碼設完就會開始備份
備份完成後,再把備份檔備到 sdcard 與 pc 上吧

2. 作業流程:
2.01 取得基本資訊:
取得 手機資訊:
Z5 開啟電話 輸入: *#*#7378423#*#* (進入 Service Menu )
選擇 Service info > Model info
出現
Model:
E6653

選擇 Service info > Configuration
IMEI:  012345678901234 (看來出來這馬賽克處理過吧)
IMEI 之後需要到 sony Unlock Bootloader 網站,取得解鎖鑰匙

2.02 下載 firmware
下載 firmware 的方法有兩種,
一種是問谷哥,直接找先拜分享的;
另一種是用 XperiFirm 下載,再用 Flashtool 打包
參考了這篇 [教學] XperiFirm --- Xperia全系列FTF下載器 (v2.5)




2.03 提取官方版本核心
利用 Xperifirm,下載官方最新版 firmware Taiwan 版本是 32.4.a.160/R2E
目的是將 kernel .sin 轉 .elf

打開Flashtool,選選單中的 Tools > Sin Editor


目錄指到下載的官方版軟體目錄下 kernel 開頭的檔案

再點選 Extract data
先將解出來的 .elf 檔案放到 rootkernel 工具壓縮檔所解壓縮後的目錄中,已備自製核心使用

2.04 Android 降版本
Flashtool 刷機機啦… 參考 Z5 Premium 6.0.1升7.1.1 抓寶抓到飛上天 這篇
APP_LOG、DIAG、SSD、USERDATA 打勾,其他什麼都不勾
(當沒勾 USERDATA,開機後系統極度不正常)

點選 閃電符號 選則 5.x 版的 FTF 刷機機…

刷機機中…

當出現 Flashing finished. 與 Please unplug and start you phone.
代表刷機完成,把傳輸線拔掉後就可以啟動你的手機

2.05 備份 TA
失敗備份TA工具:
backupTA_V2 失敗備份出0kb的TA
iovyroot_v0.3 失敗備份TA

成功備份TA工具:
iovyroot_v0.4:(下載 chrome 會認為是病毒…用其他瀏覽器下載吧)

注意:必須先關掉 FlashTool 不然會干擾 adb 運作
sudo -i
adb devices
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
AB1C2DEFG3 device

(AB1C2DEFG3 看來出來這馬賽克加密處理過吧)
再次檢查是否已連接上

解壓縮 iovyroot_v0.4 後進入目錄,就可以輸入下面指令
gg-Desktop sony # cd iovyroot_v0.4/
gg-Desktop iovyroot_v0.4 # adb push "root/iovyroot" "/data/local/tmp/iovyroot" > NUL 2> NUL
gg-Desktop iovyroot_v0.4 # adb push "root/backup.sh" "/data/local/tmp/backup.sh" > NUL 2> NUL
gg-Desktop iovyroot_v0.4 # adb shell "chmod 777 /data/local/tmp/iovyroot"
gg-Desktop iovyroot_v0.4 # adb shell "chmod 777 /data/local/tmp/backup.sh"
gg-Desktop iovyroot_v0.4 # adb shell "mkdir /data/local/tmp/tabackup" > NUL 2> NUL
gg-Desktop iovyroot_v0.4 # adb shell "/data/local/tmp/iovyroot /data/local/tmp/backup.sh"
iovyroot by zxz0O0
poc by idler1984

[+] Changing fd limit from 1024 to 4096
[+] Changing process priority to highest
[+] Getting pipes
[+] Allocating memory
[+] Installing JOP
    [+] Patching address 0xffffffc001950630
    [+] Start map/unmap thread
    [+] Start write thread
    [+] Spraying kernel heap
    [+] Start read thread
    [+] Done
[+] Patching addr_limit
    [+] Patching address 0xffffffc034410008
    [+] Start map/unmap thread
    [+] Start write thread
    [+] Spraying kernel heap
    [+] Start read thread
    [+] Done
[+] Removing JOP
got root lmao

TA.img copied successfully

gg-Desktop iovyroot_v0.4 # adb pull "/data/local/tmp/tabackup/" "." > NUL 2> NUL
gg-Desktop iovyroot_v0.4 # adb shell "rm /data/local/tmp/tabackup/TA-*.img"
gg-Desktop iovyroot_v0.4 # adb shell "rm /data/local/tmp/backup.sh"
gg-Desktop iovyroot_v0.4 # adb shell "rm /data/local/tmp/iovyroot"
gg-Desktop iovyroot_v0.4 # adb shell "rmdir /data/local/tmp/tabackup"

其中 gg-Desktop sony # 是 linux 終端機 的命令提示字元
gg-Desktop 表示電腦名稱 ,sony 是目前工具放的位置路徑
cd iovyroot_v0.4/  切換路徑到 /home/gg/Download/sony/iovyroot_v0.4/
其他指令就是參照 iovyroot_v0.4 裡的 tabackup.bat 批次檔中的指令
整個指令做完 有出現 TA.img copied successfully 訊息,
就會在 iovyroot_v0.4/  目錄下產生一個 TA-xxxxxxx.img 檔案

2.06 自製核心
將 2.03 提取官方版本核心 解出來的 .elf 檔案放到 rootkernel_v5.23 解壓縮後的目錄中(回憶一下上面做過的)
將 2.05 備份 TA 備份出來的"TA-日期.img"放到 rootkernel_v5.23 解壓縮後的目錄中
將終端機路徑轉到 rootkernel_v5.23

在終端機裡輸入指令 "/bin/bash ./flash_dk.sh TA-xxxx2019.img Z5_DK.ftf"
產生 DK.ftf 檔

gg-Desktop rootkernel_v5.23_Windows_Linux # /bin/bash ./rootkernel.sh Z5_E6653_Customized\ TW_1298-8309_32.4.A.0.160_R2E_kernel_S1-SW-LIVE-F936-PID1-0006-MMC.elf TW_1298-8309_32.4.A.0.160_R2E_kernel_S1-SW-LIVE-F936-PID1-0006-MMC.boot_TA.img TA-30092019.img
Rootkernel V5.23
- Unpacking kernel
  Found elf boot image
  Kernel version: 3.10.84-perf-g5e25a09
  Found appended DTB
- Detected vendor: somc (Sony), device: sumire (Xperia Z5), variant: row
- Unpacking initramfs
- Detected platform: 64-bit
- Detected Android version: 7.1.1
- dm-verity is enabled. Disable? (Say yes if you modify /system) [Y/n] y
  Disabling dm-verity
- Sony RIC is enabled. Disable? [Y/n] y
  Disabling Sony RIC
- Skipping TWRP recovery. No kernel modules for 3.10.84-perf-g5e25a09 available
- Install DRM fix? [Y/n] y
- Install busybox? [Y/n] n
- Creating new initramfs
- Creating boot image
- Cleaning up
Done

這樣就產生 修改過 BOOT Kernel 檔案囉
檔名叫 TW_1298-8309_32.4.A.0.160_R2E_kernel_S1-SW-LIVE-F936-PID1-0006-MMC.boot_TA.img

2.07 Android 升版本
升版本,有兩種方式…
一種是使用 Flashtool 刷機機啦,
一種是使用 Z5 來線上即時更新,會一路從 5.1 > 6.0 > 6.0.1 > 7.1.1
(我用 Flashtool 刷完發現 Z5 怪怪的…螢幕閃閃閃…然後我就回朔到 5.1 去慢慢升級)

2.08 Unlock BootLoader
注意:開發人員選項,其一開啟  啟用 OEM 解鎖;另一則是開啟  USB 偵錯 
參考 [教學] Sony Xperia Flashtool 之 解鎖、Root、變更原廠韌體版本 這篇
先到 Unlock Bootloader 去取鑰匙

輸入 Z5 查到的 IMEI(看來出來這馬賽克處理過吧)

Your unlock code for 012345678901234
1234AB5678C9D012


點選 BLU

照著做

接著做

輸入 IMEI、Unlock Code,並按下 Unlock

就這樣很空虛的解鎖完成

2.09 置換 自製核心 Boot Kernel
gg-Desktop rootkernel_v5.23_Windows_Linux # adb reboot bootloader
上面這段是切換到 fastboot

把 Boot Image 刷到 Z5
gg-Desktop rootkernel_v5.23_Windows_Linux # fastboot flash boot TW_1298-8309_32.4.A.0.160_R2E_kernel_S1-SW-LIVE-F936-PID1-0006-MMC.boot_TA.img

2.10 置換 TWRP Recovery
去下載 Z5 TWRP Recovery ,將它放到找的到位置,
我也放到 rootkernel_v5.23_Windows_Linux 去

gg-Desktop rootkernel_v5.23_Windows_Linux # fastboot flash recovery recovery.img
上面這段是刷 recovery

gg-Desktop rootkernel_v5.23_Windows_Linux # fastboot boot recovery.img
上面這段是直接用 recovery.img 開機囉
(謎之音:能不能有點貢獻…不要老靠谷哥…)

進 Recovery 之後要刷 SuperSU、Magisk 就可以 ROOT 啦

                                                                                                                                                 (未完待續…)

3. 參考文獻

星期一, 8月 12, 2019

【C#】3DES 加解密

口白:
流動的水沒有形狀,漂流的風找不到蹤跡,任何案件的 Coding 都取決於心
唯一看透真相的是,外表看似卜朧共,智慧卻低於常人的 名卜朧共 刻爛
(謎之音:把 Code 刻到爛簡稱刻爛.爛..爛...)
Music:
#表升半音 []表高八度
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 5 4 3 4 2 6 4 5 [2] [1] #6 6 5 6
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 4 3 2 4 2 6 4 5 [2] #6 6 5 6
口白:
刻爛:真実はいつも一つ!

環境:
https://rextester.com/ online

狀況:
該死的資安,這世界有什麼資料是重要的…
為了符合萬惡的資安!研究了C# 3DES的方法

要如何實做?問問谷哥吧…沒有谷哥罩…我就廢了…

問題:
什麼是 3DES 維基百科,自由的百科全書 定義如下:
密碼學中,三重資料加密演算法(英語:Triple Data Encryption Algorithm,縮寫為TDEA,Triple DEA),或稱3DES(Triple DES),是一種對稱密鑰加密塊密碼,相當於是對每個資料塊應用三次資料加密標準(DES)演算法。由於電腦運算能力的增強,原版DES密碼的金鑰長度變得容易被暴力破解;3DES即是設計用來提供一種相對簡單的方法,即通過增加DES的金鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼演算法。
對看透真相的卜朧共來說,這一點都不重要!

重要的是可以線上寫程式測試…是多美好的事…
在一次無意間發現了rextester.com 這個網站…
它可以線上編輯程式並執行,
對於從開始寫asp程式就用記事本寫的卜朧共來說,簡直是天堂般的存在…
這樣寫一些測試用的小程式,超便利的…

問谷哥找了一些文獻,寫了一段來測試…

程式碼如下:
//Rextester.Program.Main is the entry point for your code. Don't change it.
//Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Security.Cryptography;
using System.IO;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //string DESKEY="A1B2C3D4E56F7G8H1I2J3K4L5M6N7O8P1Q2R3S4T5U6V7W8X";
            string DESKEY="A1B2C3D4E56F7G8H1I2J3K4L";
            string txtSource="Hello, world!";
            //Your code goes here
            Console.WriteLine(txtSource);
            
            string EncryptResult = Encrypt3DES(txtSource, DESKEY);
            Console.WriteLine(EncryptResult);
            
            string DecryptResult = Decrypt3DES(EncryptResult, DESKEY);
            Console.WriteLine(DecryptResult);
            
            
        }
        
        /// <summary>
        /// 使用3DES加密
        /// </summary>
        /// <param name="strSource"></param>
        /// <param name="strKey">長度為24字元</param>
        /// <returns></returns>
        public static string Encrypt3DES(string strSource, string strKey)
        {
            TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
            //DES.Key = UTF8Encoding.UTF8.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strKey, "md5").Substring(0, 24));
            DES.Key = UTF8Encoding.UTF8.GetBytes(strKey.Substring(0, 24));
            DES.Mode = CipherMode.ECB;
            //DES.Mode = CipherMode.CBC;
            ICryptoTransform DESEncrypt = DES.CreateEncryptor();
            byte[] Buffer = UTF8Encoding.UTF8.GetBytes(strSource);
            return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
        }

        /// <summary>
        /// 使用3DES解密
        /// </summary>
        /// <param name="strEncryptData"></param>
        /// <param name="strKey">長度為24字元/param>
        /// <returns></returns>
        public static string Decrypt3DES(string strEncryptData, string strKey)
        {
            TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
            //DES.Key = UTF8Encoding.UTF8.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strKey, "md5").Substring(0, 24));
            DES.Key = UTF8Encoding.UTF8.GetBytes(strKey.Substring(0, 24));
            DES.Mode = CipherMode.ECB;
            //DES.Mode = CipherMode.CBC;
            DES.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
            ICryptoTransform DESDecrypt = DES.CreateDecryptor();
            string result = "";
            byte[] Buffer = Convert.FromBase64String(strEncryptData);
            result = UTF8Encoding.UTF8.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
            return result;
        }
    }
    
} 


圖片最下方那三段
第一段:Hello, world! 是顯示原始字串
第二段:uxu5I2SpRlAHUuRksyIPCA==
是3DES 加密 模式用 ECB
第三段:Hello, world! 解密囉

參考文獻:
1. 維基百科
2. [C# WinForm] 使用3DES 及金鑰加密及解密
3. 【C#.Net】使用 AES 演算法為字串加密解密
4. Android TripleDES encrypt/decrypt - 3DES加密(ECB Mode)
5. rextester.com


星期一, 6月 10, 2019

【Android】Sony Z5 Compact 尋根之路(ROOT)與高級磚頭的生死對決

口白:
流動的水沒有形狀,漂流的風找不到蹤跡,任何案件的 Coding 都取決於心
唯一看透真相的是,外表看似卜朧共,智慧卻低於常人的 名卜朧共 刻爛
(謎之音:把 Code 刻到爛簡稱刻爛.爛..爛...)

Music:
#表升半音 []表高八度
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 5 4 3 4 2 6 4 5 [2] [1] #6 6 5 6
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 4 3 2 4 2 6 4 5 [2] #6 6 5 6

刻爛:真実はいつも一つ!

欲練神功…揮到自宮…(謎之音:想練神功就準備切機機)
練完神功…無需自宮…(謎之音:神功練好就不用切機機)
環境:
Sony Z5 Compact  7.1.1 一枚
加入空軍自備 pc 一枚 (linux mint 18.x)
收集底下列出的工具、軟體、FTF刷機包

狀況:
自從 Pokemon GO 推出已有多年,
從軍以來,步兵卜朧共都是一步一腳印的攻城掠地,
但光陰似箭…炎炎夏日…
一直嚮往空軍在天上飛的自由自在…(謎之音:明明就是想在家吹涼涼…抓爽爽…)

在看了底下參考文獻的1~10篇後,(謎之音:就手賤啦…)
藉由 Flashtool 完成了 7.1.1 降版動作,版本降到 5.1
藉由 lovyroot v0.3(0.4抓不下來) 與 Dirtycow TABACKUPV2 指令交互參考,
在linux環境下導出 TA 的備份檔…但是不知道是否正確…
抱持的革命必須有所犧牲… 尋根開苞必喪失保固的決心之下…
(謎之音:明明就是過保了)
再藉由 Flashtool 完成了 6..x 升版動作,版本升到 6.0.1
透過 Flashtool 工具,取得 6.0.1 的 kernel.elf
透過 rootKernel 工具與 Magisk 的 zip 檔 ,打包 新的 kernel.img,我是選擇把 TA 也包進去(這部份我試了多次…第一次是包了7.1.1的kernel…)
接下來就是透過官網取得 Bootloader 開苞 房門密碼…
接下來我是透過 Flashtool 去 BLU(Bootloader Unlock)
(謎之音:明明就是懶的打指令)
接著 透過指令 adb reboot bootloader 將手機轉成 fastboot mode

怎麼分辨 adb mode 或是 fastboot mode?
整個過程都是在 usb debug 狀態下作業…
透過指令吧 sudo adb devices 如果有回應就是在 adb
透過指令吧 sudo fastboot devices 如果有回應就是在 fastboot
Z5C 正常開機狀態下會是在adb 來操作…

然後…刷了 7.1.1 的 kernel 跟 recovery…
重開機後就停在 sony 的 mark上(謎之音:要刷對阿…)
然後就變成了高級磚頭…
這時候 你不管按什麼按鈕都不理你…就停在 sony 的 mark上
然後就變成了高級磚頭…
這時不管 power 按多久按到天荒地老…海枯石爛…手機沒電 都不理你…
(謎之音:明明按不到十秒,就快摔手機了…)
然後就變成了高級磚頭…
                                                                                                                                           The End…





接下來找到底下那篇 sony 關機密技 …
(Sony Xperia 系列手機變磚(無法開機或不斷重開機)解救經驗分享)
就是按下電源鍵+加大音量鍵,等著等著就震震震…
感覺Z5C 發出 按你涼 的三聲振動之後它就昏過去了…

這時就是解磚的時候啦…
解救法是…
斷開所有連線…先把 Flashtool 工具準備好 FTF 包準備好…
然後…在關機的狀態下…按著 加大音量鍵 把 usb 線接上去
(記得那時候是按著降低音量鍵 接上去的, Flashtool 之後從新引導了一次 按 加大音量鍵 )
只要能進fastBoot 就有救,只要能刷機就有救…
刷完機…就跟新的一樣阿…不過這時 已經 BLU 了
把對應刷進去版本的新 kernel 刷進去 基本上就完成了
因為 kernel 打包的過程中,如果有把 Magisk or SuperSU 的 zip 二則一,
放在 rootKernel 工具路徑下
這樣就會把 root 工具 與 twrp 一併打包進去
所以刷完後…基本上 recovery 也在了
無須再刷 recovery ,想用新版的也可以刷啦…
還有一個問題…不知道是刷了哪個工具後…recovery就進不去了…
反正該刷的刷完也不用再進去啦…
想再進去也不需要在重刷 boot ,
可以直接在 fastboot  mode 用指令,fastboot boot <RECOVERY檔案>
如:sudo fastboot boot ./20190514-TWRP-3.3.0-suzuran-recovery.img
就可以直接開進去 recovery …
(謎之音:能不能有點貢獻…不要老靠谷哥…)

                                                                                                                                                 (未完待續…)


【工具】


【參考文獻】
  1.  不失去原機 DRM 的情況下,取得 Sony Xperia Z5 家族 Root 權限並重新上鎖教學
  2.  Sony Xperia 系列備份 TA 分割區 (重新上鎖用) 與 DRM Key 教學 (Android 6.x 適用)
  3.  [TOOL] XperiFirm ~ Xperia Firmware Downloader [v5.3.8]
  4.  Sony Xperia Z5 系列、Z3+ 各版本軟體 FTF 刷包下載
  5.  Sony 刷機前置作業,Flashtool 安裝及使用教學
  6.  [刷機必備]Flashtool v0.9.23.2 <含刷固件教學>
  7.  Sony XPERIA Z5 Compact – Android 7.1.1 – 32.4.A.1.54 Bootloader unlock
  8.  ADB/Fastboot工具線刷TWRP Recovery圖文教學
  9. [TWRP][E5823] Latest TWRP for Z5 Compact
  10. Sony Z5 Compact [E5803] (suzuran) Recovery install / root
  11.  I can't load in fastboot mode
  12. .如何在電腦上使用 ADB指令操作Android手機(How to use adb to manipulate android mobile phone )
  13. Sony Xperia 系列手機變磚(無法開機或不斷重開機)解救經驗分享
  14. [FTF] Newest Android 7.1.1 for Xperia Z5C (E5823) 32.4.A.0.160
  15. [更新7.1.1 0.160]Z3+、Z4平板 Z5P、Z5、Z5c Android 7.0解鎖、ROOT(Magisk)
  16. [V13.2升級]隱藏root,Magisk工具(另類root)
  17. .宇的地盤 2016/6/27 4:19PM-更新原廠FTF載點-->HERE!


【PS】
單純更新 Magisk 20 PokemonGo 會不能玩…我想因該有其他的調校方式才對…繼續研究… 20191022